巧用Python: 绘制词云(2) - 使用遮罩图片
2025-04-27 04:44:24
本系列文章是配合我发布的《巧用Python》系列视频教程的知识点总结和补充。
使用open()方法打开文本文件
程序需要使用的文本内容,可以保存在文件当中,例如扩展名为.txt的文本文件。本例中将上一节课的字符串str的内容存储在了文本文件str.txt中,通过open(“文件路径”,“打开模式”)的方法打开,并且调用打开的文件对象的read()方法,读出文件内容,并赋值给text,读出的内容是字符串类型。
= open("str.txt","r").read() text
遮罩图片的选择
为了得到理想的遮罩效果,遮罩图片的背景应该尽量使用纯白色,即#FFFFFF。
使用PIL库中的Image类获得图像数据
为了将所用的遮罩图像引入程序,需要用PIL库里Image类的open()方法读取图像文件。此例中所用的遮罩图片名称为“ironman.png”, open()方法会返回Image类型的对象。
open("ironman.png") Image.
使用numpy库中的array()方法获得图像数据
用上面得到的Image对象作为numpy库中array()的参数,会得到对应的像素矩阵,以多维数组的形式储存。
= np.array(Image.open("ironman.png")) mymask
如果打印mymask里索引值为0的数组项的值,会得到图片左上角第一个像素点的RGB值。
print(mymask[0])
定义WordCloud对象时增添遮罩相关属性值
用mask属性指定所用的遮罩图像数组值,如果希望为词云加上边框,用contour_width设置边框的宽度,用contour_color给出边框的颜色。
=WordCloud(stopwords=sw, background_color=(7,237,237),\
wc = mymask, contour_width=1, contour_color="black") mask
设置颜色的数值格式,可以使用颜色对应的字符串常量,如:contour_color=“black”,也可使用格式为(R,G,B)的颜色三值(分别为0到255之间的整数值)设置,如:background_color=(7,237,237)。
通过ImageColorGenerator类的对象重设词云对象颜色
使用图像颜色生成器ImageColorGenerator来获得遮罩图片的色彩方案,并以此来改变词云的原有色彩方案。
这里定义ImageColorGenerator对象imacolor时传递的参数是遮罩图片对应的多维数组mymask。
然后通过WordCloud类对象wc的方法recolor(),将属性color_func设置为得到的ImageColorGenerator对象imcolor。
=ImageColorGenerator(mymask)
imcolor=imcolor) wc.recolor(color_func
本节课完整代码
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
from matplotlib import pyplot as plt
from PIL import Image
import numpy as np
= open("str.txt","r").read()
text
=set(STOPWORDS)
sw
#sw.add("Python")
= np.array(Image.open("ironman.png"))
mymask
= WordCloud(stopwords=sw, background_color=(7,237,237),\
wc = mymask, contour_width=1, contour_color="black")
mask
wc.generate(text)=ImageColorGenerator(mymask)
imcolor=imcolor)
wc.recolor(color_func
plt.imshow(wc)
"off")
plt.axis(
plt.show()
"mywordcloud.png") wc.to_file(
最后得到的图片(每次运行,词云中文字的分布效果随机产生):