mylogo

退役程序员的茶室 RetiredCoder.cn

← 返回上一页

巧用Python: 绘制词云(2) - 使用遮罩图片

2025-04-27 04:44:24

本系列文章是配合我发布的《巧用Python》系列视频教程的知识点总结和补充。

使用open()方法打开文本文件

程序需要使用的文本内容,可以保存在文件当中,例如扩展名为.txt的文本文件。本例中将上一节课的字符串str的内容存储在了文本文件str.txt中,通过open(“文件路径”,“打开模式”)的方法打开,并且调用打开的文件对象的read()方法,读出文件内容,并赋值给text,读出的内容是字符串类型。

text = open("str.txt","r").read()

遮罩图片的选择

为了得到理想的遮罩效果,遮罩图片的背景应该尽量使用纯白色,即#FFFFFF。

使用PIL库中的Image类获得图像数据

为了将所用的遮罩图像引入程序,需要用PIL库里Image类的open()方法读取图像文件。此例中所用的遮罩图片名称为“ironman.png”, open()方法会返回Image类型的对象。

Image.open("ironman.png")

使用numpy库中的array()方法获得图像数据

用上面得到的Image对象作为numpy库中array()的参数,会得到对应的像素矩阵,以多维数组的形式储存。

mymask = np.array(Image.open("ironman.png"))

如果打印mymask里索引值为0的数组项的值,会得到图片左上角第一个像素点的RGB值。

print(mymask[0])

定义WordCloud对象时增添遮罩相关属性值

用mask属性指定所用的遮罩图像数组值,如果希望为词云加上边框,用contour_width设置边框的宽度,用contour_color给出边框的颜色。

wc =WordCloud(stopwords=sw, background_color=(7,237,237),\
mask = mymask, contour_width=1, contour_color="black")

设置颜色的数值格式,可以使用颜色对应的字符串常量,如: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。

imcolor=ImageColorGenerator(mymask)
wc.recolor(color_func=imcolor)

本节课完整代码

 from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
 from matplotlib import pyplot as plt
 from PIL import Image
 import numpy as np
 
 text = open("str.txt","r").read()
 
 sw=set(STOPWORDS)
 
 #sw.add("Python")
 
 mymask = np.array(Image.open("ironman.png"))
 
 wc = WordCloud(stopwords=sw, background_color=(7,237,237),\
 mask = mymask, contour_width=1, contour_color="black")
 
 wc.generate(text)
 imcolor=ImageColorGenerator(mymask)
 wc.recolor(color_func=imcolor)
 
 plt.imshow(wc)
 
 plt.axis("off")
 plt.show()
 
 wc.to_file("mywordcloud.png")

最后得到的图片(每次运行,词云中文字的分布效果随机产生):

Image