2 Star 2 Fork 0

nylon26 / python

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2wordcloud.md 27.09 KB
一键复制 编辑 原始数据 按行查看 历史
nylon26 提交于 2020-04-05 10:34 . update 2词云的使用.md.

——————————————————————————————————————————————

本内容由python学习群130412612的群友收集资料而成,如部分内容侵犯个人版权,请联系本群去除。

——————————————————————————————————————————————

词云的使用方法

部分的信息来源:

https://cloud.tencent.com/developer/article/1450941

https://www.cnblogs.com/hello-wei/p/10320363.html

https://mp.weixin.qq.com/s?__biz=MzIyNTYwODM3NA==&mid=2247488738&idx=1&sn=5f76ad424efe16184aa894526682c369&chksm=e87c433bdf0bca2d7279e0ac1a179de3fd7fe978a14b408506085bbcc13c10e338b681976cd4&mpshare=1&scene=23&srcid=&sharer_sharetime=1585645753991&sharer_shareid=54d6fbb310aeb9b3868853d463ebf513#rd

首先需要安装三个包: # 安装:pip install matplotlib # 安装:pip install jieba # 安装:pip install wordcloud

一、词云案例

1.制作英文词云案例

效果图:

img

代码实现:

import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud
# 1.读入txt文本数据
text = open(r'test.txt', "r").read()
#print(text)
# 2.结巴中文分词,生成字符串,默认精确模式,如果不通过分词,无法直接生成正确的中文词云
cut_text = jieba.cut(text)
# print(type(cut_text))
# 必须给个符号分隔开分词结果来形成字符串,否则不能绘制词云
result = " ".join(cut_text)
#print(result)
# 3.生成词云图,这里需要注意的是WordCloud默认不支持中文,所以这里需已下载好的中文字库
# 无自定义背景图:需要指定生成词云图的像素大小,默认背景颜色为黑色,统一文字颜色:mode='RGBA'和colormap='pink'
wc = WordCloud(
        # 设置字体,不指定就会出现乱码
        # 设置背景色
        background_color='white',
        # 设置背景宽
        width=500,
        # 设置背景高
        height=350,
        # 最大字体
        max_font_size=50,
        # 最小字体
        min_font_size=10,
        mode='RGBA'
        #colormap='pink'
        )
# 产生词云
wc.generate(result)
# 保存图片
wc.to_file(r"wordcloud.png") # 按照设置的像素宽高度保存绘制好的词云图,比下面程序显示更清晰
# 4.显示图片
# 指定所绘图名称
plt.figure("jay")
# 以图片的形式显示词云
plt.imshow(wc)
# 关闭图像坐标系
plt.axis("off")
plt.show()

其中text.txt文件内容如下:

python python3 is good well bestbast shell cool Age has reached the end of the beginning of a word. May be guilty in his seems to passing a lot of different life became the appearance of the same day; May be backto oneself the paranoid weird belief disillusionment, these days, my mind has been very messy, in my mind constantly. Always feel oneself should go to do something, or write something. Twenty years of life trajectory deeply shallow, suddenly feel something, do it.The end of our life, and can meet many things really do?During myhood, think lucky money and new clothes are necessary for New Year, but as the advance of the age, will be more and more found that those things are optional; Junior high school, thought to have a crush on just means that the real growth, but over the past three years later, his writing of alumni in peace, suddenly found that isn't really grow up, it seems is not so important; Then in high school, think don't want to give vent to out your inner voice can be in the high school children of the feelings in a period, but was event ually infarction when graduation party in the throat, later again stood on the pitch he has sweat profusely, looked at his thrown a basketball hoops , suddenly found himself has already can't remember his appearance.

2.制作中文词云案例

img

代码实现:

#!/usr/bin/Python

# -*- coding: utf-8 -*-

from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud, STOPWORDS


###当前文件路径
d = path.dirname(__file__)

# Read the whole text.

file = open(path.join(d, 'alice.txt')).read()
##进行分词
#刚开始是分完词放进txt再打开却总是显示不出中文很奇怪
default_mode =jieba.cut(file)
text = " ".join(default_mode)
alice_mask = np.array(Image.open(path.join(d, "1.png")))
stopwords = set(STOPWORDS)
stopwords.add("said")
wc = WordCloud(  
    #设置字体,不指定就会出现乱码,这个字体文件需要下载
    font_path=r'/usr/share/fonts/wqy-microhei/wqy-microhei.ttc',  
    background_color="white",   
    max_words=2000,   
    mask=alice_mask,  
    stopwords=stopwords)  

# generate word cloud

wc.generate(text)

# store to file

wc.to_file(path.join(d, "qq_result.jpg"))

# show

plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.figure()
plt.imshow(alice_mask, cmap=plt.cm.gray, interpolation='bilinear')
plt.axis("off")
plt.show()

其中alice.txt文件内容:

赤朽木叶家族的传说观后感 我想,万和毛球都被那个混乱的年代束缚住了吧,千里眼说到底也只能看到熟悉的人的未来,我想多半对于万叶来说是痛苦的吧,即使是从小被忘在了鸟取还是从小被欺负,可以说万叶是个 坚强而纯真的孩子,包括黑菱绿也是,能为了哥哥那样付出,可见她深深地爱慕着哥哥,所以从黑菱绿哥哥自杀事件发生后,她主动找万叶帮忙,真挚的友情逐渐浮出水面,一直到永远,谈 到万叶必说的第二个人,就是丰寿了吧,或许该排第一位的,因为他们之间的感情都被好好的压制住了,没错,说到底我也不知道万叶对于爱情的理解,或许只是转变成了做女人的理解,女 人能为男人做的就是多生几个娃,如今想来也真是既简单又粗暴,里面的男人我都不是很喜欢,同样的他们的生活也很简单那就是不顾一切支撑起赤朽叶家,除了孤独,但是为何我也不看好 他,就连瞳也对救了自己的命的舅舅一样鄙夷,自从毛球死了之后,我想再也没人可以进入他的心扉,同时我也觉得万叶一直注视着泪,真的好么,她的爱是不是很有偏差,如果她好好的管 着毛球,或许她的人生会有变化,即使是舍去她那漫画天赋,说到底毛球的人生和漫画真的有趣么,为什么在我看来枯燥乏味且中二全开的经历却能成为人们的支撑甚至是美好的向往,难道 是她的反抗,为什么她如此的想要征服“中原”,却总是将男朋友拱手让给同父异母的妹妹,而且为什么她的双眸里映照不出百夜,可是最后庭院的大闹,甚至逼得妹妹去殉情,有时候真有些 没有头绪,但是无疑会有神秘的色彩,说实话我也不太喜欢毛球,因为妹子还是温柔的比较好,而且似乎她似乎有不祥的象征,以至于编辑们纷纷扬场而去,但是我对她也还是充满羡慕之情 ,对朋友也一样,敢于纠正朋友且对于表达与朋友说再见的方式也相当神圣,还有对于那个漂亮的女孩这么快就香消玉损我也对梦想和人生产生了深深的质疑,蝶子曾经笑着说自己的理想与 对生活富有激情的想法,我当时就觉得她或许是那里面最正常的吧,可是为什么作者要将她劣质化呢,说到底还是这个世界的问题吧,学生们崩溃了啊,在说说毛球吧在哥哥泪从山里消失之 后成为家里的长女,作为家里的支撑,她一下子高大了许多,再也不是开着摩托玩古惑仔的疯丫头了,然后开始了12年的漫画连载,所以说她漫画的成功也到底是个玩笑或是奇迹吧,12年无 休止的工作,取得了巨大的成功,终于当漫画完结后,她也可以好好休息了,还记得她跟女儿瞳子说的“妈妈好累,去休息下”,如果不是失去了昔日的眼神昔日的光彩,一个几岁的小女孩也 不会察觉到妈妈或许会离开她了,即使还没好好撒过娇,即使每天望着妈妈的背影,她也察觉到了,毛球说到底都不过死人啊,真纱的死,蝶子的死,百夜的死,每次都让她的人生飘摇起来 ,最后轰然倒塌。。。再回头说万叶吧,从小到大被人欺负,黑菱绿也只是典型吧,哈哈,一个喊着“捡来的丫头”,一个喊着“爱欺负人的丫头”,相隔十几年之后,称呼也依然没变,好朋友 就该这样吧,万叶人生的转折或许就是在遇到辰的时候吧,这个白白胖胖的惠比须作为赤朽叶家的当家,对万叶像是早就考量过了一样,直接让万叶嫁入自己家,说到底到底是为了什么,万 叶真的能为赤朽叶家带来福运么,但是神奇的是她真的做到了,预测到石油危机的问题提早做出了准备度过了危机,估计还有许多吧,万叶吧,挺单纯的孩子,到最后也是丰寿与炼铁炉殉情 之后,她居然认为是自己害死了丰寿,还让瞳子对祖母产生了怀疑彻查了一番,其实如果认真的考虑一下就会发现那封信重复了的信,一封是给万叶一封是给毛球的,同样的内容“一緒に死ぬ ”却是不一样的意思,丰寿这个男人到底是个纯情的汉子,为了锅炉献出了自己的右眼,最后宁愿死也要和锅炉在一起,可见他挚爱着这个工作,这个冰冷的怪物,我也想知道他是不是也同样 爱着万叶,,我想读者们都有些许看法,就不说了,最后必须说说以第一视角诉说着本次故事的小孙女瞳,与祖母和母亲不同的是,她是一个普普通通的女人,我想这是绝对的吧,自由,从 这个文章中我们看到了赤朽叶家族的兴衰,伴随着故事人物的消亡,一切都变得不一样了,到最后只剩下了瞳,孤独,包,还有忙于工作的父亲,这个家失去了往日的魔幻色彩,伴随着万叶 的逝去,我以为故事走向了终结,可是为什么,作者要写瞳子,写她的爱情,写她的人生观,写这个世界的无药可救。。。看到最后我想起了曾经看过的一部动漫,名叫colorful,看完我明 白了两件事,之一就是自杀的罪并非莫过于其它的罪恶,因为生命的意义很重大,超出了各种伦理逻辑所能诠释的,所以敬畏生命不是么,其次便是无论怎样不要失去生活的希望,这个世界 即使再丑陋,再黑暗,也不要放弃她,因为总有人在注视着你,在守护着你,因为总会有美丽的风景进入你的眼帘,因为今天无论怎样不是还有明天么,当你睁开眼发现自己仍旧活着不是挺 好么,那一丝丝的美好足够支撑你了,这就是为什么人类看得到五颜六色的原因吧。。

所谓“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

二、具体分析

环境准备

python -m pip install wordclud
python -m pip install matplotlib
python -m pip install jieba

在Windows上,如无法成功安装,可使用已经编译好的二进制包,下载安装

https://www.lfd.uci.edu/~gohlke/pythonlibs/

wordclud

Python用于生成词云的库。 wordclud 官方文档

属性 简述
font_path 字体路径,做中文词云必须设置字体,否则无法显示
width 输出的画布宽度,默认为400像素
height 输出的画布高度,默认为200像素
mask 如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取
min_font_size 显示的最小的字体大小
max_font_size 显示的最大的字体大小
max_words 要显示的词的最大个数,默认200
scale 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5
color_func 生成新颜色的函数,如果为空,则使用 self.color_fun
prefer_horizontal 词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )
stopwords 设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS
font_step 字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误,默认1
background_color 背景颜色
relative_scaling 词频和字体大小的关联性,默认0.5
mode 当参数为“RGBA”并且background_color不为空时,背景为透,默认“RGB”
regexp 使用正则表达式分隔输入的文本
collocations 是否包括两个词的搭配,默认True
colormap 给每个单词随机分配颜色,若指定color_func,则忽略该方法

matplotlib

一个Python 2D绘图库。Matplotlib试图让简单易事的事情成为可能。只需几行代码即可生成绘图,直方图,功率谱,条形图,错误图,散点图等,该库最常用于Python数据分析的可视化。 官方文档

最小示例

from wordcloud import WordCloud
import matplotlib.pyplot as plt

with open("野性的呼唤.txt", encoding="utf-8") as file:
    word_cloud = WordCloud().generate(file.read())
    plt.figure()      # 创建一个图形实例
    plt.imshow(word_cloud, interpolation='bilinear')
    plt.axis("off")  # 不显示坐标轴
    plt.show()

interpolation 参数的用法

中文词云

wordcloud 对中文分词支持不足,因此需要配合jieba分词库使用

from wordcloud import WordCloud
import matplotlib.pyplot as plt

with open("fanrenxiuxian.txt", encoding="gbk") as file:
    word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",
                           background_color="white",
                           max_words=200,
                           max_font_size=100,
                           width=1000,
                           height=860).generate(file.read())


    plt.figure()      # 创建一个图形实例
    plt.imshow(word_cloud, interpolation='bilinear')
    plt.axis("off")  # 不显示坐标尺寸
    plt.show()

添加图片背景效果

from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
from matplotlib.image import imread
import matplotlib.pyplot as plt

back_img = imread("timg.jpg")
img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:
    word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",
                           background_color="white",
                           max_words=200,
                           max_font_size=100,
                           width=1920,
                           mask=back_img,
                           height=1080).generate(file.read())

    word_cloud.recolor(color_func=img_colors)  # 替换默认的字体颜色

    plt.figure()  # 创建一个图形实例
    plt.imshow(word_cloud, interpolation='bilinear')
    plt.axis("off")  # 不显示坐标尺寸
    plt.show()

扩展:将图片加载的几种方法

  • PIL.Image.open
  • scipy.misc.imread
  • skimage.io.imread
  • cv2.imread
  • matplotlib.image.imread

各方法性能对比

jieba

特点

  • 支持三种分词模式:
    • 精确模式,试图将句子最精确地切开,适合文本分析;
    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
  • 支持繁体分词
  • 支持自定义词典
  • MIT 授权协议

官方文档

简单示例

import jieba

with open("fanrenxiuxian.txt", 'r', encoding="gbk") as file:
    # jieba.enable_parallel(4) 并行运算,类unix系统,Windows不支持
    seg_list = jieba.cut(file.read(), cut_all=False)
    print("/".join(seg_list))

提取关键词

import jieba.analyse

# TF-IDF算法关键词抽取
with open("fanrenxiuxian.txt", 'r', encoding="gbk") as file:
    jieba.analyse.set_stop_words('stopwords.txt')
    tags = jieba.analyse.extract_tags(file.read(), 100)
    print(tags)

中文词云实例

网络上关于中文词云的博客资料99.9%是对wordcloud官网示例的翻译,我要说的是官方示例基本就是个大坑,不知道是不太放心上还是本身就是临时工lowB程序员写的。而国内的博主习惯了粘贴复制,已经丧失了独立思考的能力,不假思索的就照搬,反正我是被坑了,用官方示例将一部《凡人修仙传》在Windows上单线程生成词云花了300多秒,而我经过仔细阅读jieba库和wordcloud库的API后,发现根本就不是官网示例那么个写法,经过我重新改造后,只需要大概60秒就能生成《凡人修仙传》的词云。

首先我们进入wordcloud文档,找到 create wordcloud with chinese 这个示例,查看一下官方示例,代码我这里就不贴了,点击链接可直接跳转

  • 第一种写法 我们结合jieba库,修改词云代码。这里使用WordCloudstopwords参数加入停止词,而不是像官方示例那样去做遍历筛选停止词,特别是写出if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:这种低性能的代码,就算是遍历, len(myword.strip()) > 1也应放在最前面去判断,而不是把停止词放在最前面去判断,这样大大的增加了时间复杂度。
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
from matplotlib.image import imread
import matplotlib.pyplot as plt
import jieba, time


def get_stopwords():
    with open("stopwords.txt", encoding='utf-8') as f_stop:
        return f_stop.read().splitlines()


back_img = imread("timg.jpg")
img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:
    stop_words = get_stopwords()                       # 获取停止词列表
    seg_list = jieba.cut(file.read(), cut_all=False)  # 返回一个生成器

    cut_list = " ".join(seg_list)

    word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",
                           background_color="white",
                           max_words=1000,
                           max_font_size=100,
                           width=1920,
                           stopwords=stop_words,
                           mask=back_img,
                           height=1080).generate(cut_list)

    word_cloud.recolor(color_func=img_colors)  # 替换默认的字体颜色

    plt.figure()  # 创建一个图形实例
    plt.imshow(word_cloud, interpolation='bilinear')
    plt.axis("off")  # 不显示坐标尺寸
    plt.show()
  • 第二种写法 这里的第二种写法基本就官方示例的写法,只是略微调整了筛选停止词时的判断条件的顺序
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
from matplotlib.image import imread
import matplotlib.pyplot as plt
import jieba, time


def get_stopwords():
    with open("stopwords.txt", encoding='utf-8') as f_stop:
        return f_stop.read().splitlines()


back_img = imread("timg.jpg")
img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:
    stop_words = get_stopwords()  # 获取停止词列表
    seg_list = jieba.cut(file.read(), cut_all=False)  # 返回一个生成器

    cut_list = "/".join(seg_list).split("/")
    content_list = []
    for word in cut_list:
        if len(word.strip()) > 1 and not (word.strip() in stop_words):
            content_list.append(word)

    word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",
                           background_color="white",
                           max_words=200,
                           max_font_size=100,
                           width=1920,
                           mask=back_img,
                           height=1080).generate(' '.join(content_list))

    word_cloud.recolor(color_func=img_colors)  # 替换默认的字体颜色

    plt.figure()  # 创建一个图形实例
    plt.imshow(word_cloud, interpolation='bilinear')
    plt.axis("off")  # 不显示坐标尺寸
    plt.show()
  • 第三种写法,最终版 这种是我推荐的做法。整个文本的分词包括关键词提取,我们都直接交给jieba库去做就行了,WordCloud库仅仅根据jieba库返回的关键词以及权重去生成词云图片就行。这里主要用到WordCloud库的generate_from_frequencies这个函数,API文档给出的说明是Create a word_cloud from words and frequencies.,有了这个API,不知道官方中文词云示例为什么还写成那样,难道是自己的API都不清楚吗?令人费解
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
from matplotlib.image import imread
import matplotlib.pyplot as plt
import jieba.analyse

back_img = imread("timg.jpg")
img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:
    jieba.analyse.set_stop_words('stopwords.txt')  # 设置止词列表
    tags = jieba.analyse.extract_tags(file.read(), 1000, withWeight=True)
    data = {item[0]: item[1] for item in tags}

    word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",
                           background_color="white",
                           max_words=1000,
                           max_font_size=100,
                           width=1920,
                           mask=back_img,
                           height=1080).generate_from_frequencies(data)

    word_cloud.recolor(color_func=img_colors)  # 替换默认的字体颜色

    plt.figure()  # 创建一个图形实例
    plt.imshow(word_cloud, interpolation='bilinear')
    plt.axis("off")  # 不显示坐标尺寸
    plt.show()

简单说一下这里的stop_words停止词其实就是需要被过滤掉的词,比如一篇文章中肯定有无数个“的”、“了”之类的对于词频而言无意义词,根据具体需求,一些副词、逻辑连接词之类的也都要过滤掉,否则就会影响准确性。

群友Deadwalking公众号的体验

生成词云的三个基本步骤

1、配置词云对象参数

2、加载要生成的词云文本,读取文件、分词整理

3、输出词云文件

例如:

import wordcloud

c = wordcloud.WordCloud()

c.generate("Life is short I use python")  #词云内容

c.to_file("pywordcloud.png")          #生成的文件名(默认保存在安装路径下)

img

wordcloud库在生成词云时的作用

1分隔:以空格分隔单词

2统计:单词出现次数并过滤掉单字(英文是一个或两个字母组成的单词)

3字体:根据统计结果配置字号(出现频率高的字号大)

4布局:环境颜色尺寸效果

实际应用:

import jieba,wordcloud
txt='肖斌张松楠王红军袁维华曾晓华魏旭方春褚文卓赵春雷\
董晨孙民康王帮纯邹丽民顾建波刘健王敏陈艳辉王功征\
田叶民李刚ZBA肖斌张松楠王红军袁维华曾晓华魏旭方春褚文卓赵春雷\
董晨孙民康王帮纯邹丽民顾建波刘健王敏陈艳辉王功征\
田叶民李钢ZBA'
zba=jieba.lcut(txt)  #中文分词
txt=' '.join(zba)   #加入空格分隔
font='C:\Download\mt.ttf'  #指定字体(文件路径不能有中文,否则报错)
w=wordcloud.WordCloud(width=1000,height=700,\
min_font_size=10,max_font_size=50,font_step=2,\
font_path=font,background_color='black')
w.generate(txt)
w.to_file("zba1.png")

使用了颜体和毛体进行了测试

img

img

加载字库时碰到的问题

这里特别要强调的是:要指定好字体路径,否则图片会出现乱码。font_path 用来指定字体文件的路径,默认为None,在我们的电脑中字体文件的路径一般为:c:/Windows/Fonts。在指定使用某个字体时我们可以先定义一个变量,如:font = 'C:\Windows\Fonts\simkai.ttf' 在wordcloud.WordCloud()方法中设置 font_path = font 就可以解决词云图片中汉字乱码的现象啦!

另外一个小插曲,我加载词云汉字文本时直接报错,编码错误,另存时要将编码改成utf-8

img

若要输出非矩形的词云,需要加载一个imageio库,不要用scipy.misc中的 imread库之间的依赖关系有些复杂,因为在导入scipy.misc库时,需要安装很多并存的第三方库,运行之后还是报错,在网上搜索原因是scipy库中的imread被弃用也就是不能用了,Python已经将imread方法封装在了imageio模块当中了,这时需要改成这样from imageio import imread即可。

import jieba
import wordcloud
from imageio import imread
mask = imread("aixin.jpg")  #在默认路径下存放相应图形照片
txt='肖斌张松楠王红军袁维华曾晓华魏旭方春褚文卓赵春雷\
董晨孙民康王帮纯邹丽民顾建波刘健王敏陈艳辉王功征\
田叶民李刚ZBA肖斌张松楠王红军袁维华曾晓华魏旭方春褚文卓赵春雷\
董晨孙民康王帮纯邹丽民顾建波刘健王敏陈艳辉王功征\
田叶民李钢ZBA'
zba=jieba.lcut(txt)  #中文分词
txt=' '.join(zba)   #加入空格分隔
w = wordcloud.WordCloud(\
width = 1000, height = 700,\
background_color = "white",
font_path = "C:\Download\yt.ttf", mask = mask)
w.generate(txt)
w.to_file("zba2.png")

img

Python
1
https://gitee.com/nylon26/python.git
git@gitee.com:nylon26/python.git
nylon26
python
python
master

搜索帮助