前面已经提到过词云的基本用法,这章将进一步美化词云图,让它看起来更高级。
1.是否重复
当我们想要制作一张词云图时,如果文本内容太少,就会发现这个词云图很单调。例如这一段文本:“生日快乐,小明”,按照常规方法制作出的词云图就会只将“生日快乐”和“小明”显示一次。
这时可以用到WordCloud中的repeat参数,作用是设置词语是否可以重复。
repeat = False 不会重复
repeat = True 可以重复(每个词语重复的次数相同)
将它写在wordcloud.WordCloud()的小括号中。
代码:
wc = wordcloud.Wordcloud(
口repeat = True)
2.显示数量
完成上面的步骤后,有人会觉得这个词云图太密集了,不好看。可以设置它的最大数量。
需要用到WordCloud中的max_words参数,作用是限制词语显示的最大数量(默认值为200),将它写在wordcloud.WordCloud()的小括号中。
代码:
wc = wordcloud.Wordcloud(
口repeat = True,
口max_words = 100)
#注:不要忘了逗号
3.自定义形状
词云默认形状是一个矩形,有人觉得不好看,想自定义词云形状,需要用到numpy库(自行安装)。
自定义形状需要一张图片,让词云在图片彩色区域显示。
第一步,打开图片。用到open()函数,用一个变量储存这个图片,格式为:变量1 = Image.open(‘图片名称.jpg’) #注意,图片名称后要有后缀
第二步,获得图片的颜色数据,需要用到numpy库中的array()函数,小括号中填写指定图片变量,格式为:变量2 = numpy.array(变量1)
第三步,赋值给参数mask,mask的作用是根据图片大小创建词云对象,并识别出图片中的彩色区域,让词云只在这些彩色区域显示文字。格式为:mask = 变量2(写在wordcloud.WordCloud()的小括号中)
需要注意的是,词云图片的宽和高就会和给定图片相同,就不需要设置width和height参数了。
代码:
import numpy
...
image1 = Image.open(‘图片.jpg’)
image2 = numpy.array(image1)
wc = wordcloud.WordCloud(
口...
口mask = image2)
4.轮廓线
词云也可以加轮廓线,并自定义它的粗细和颜色。
WordCloud中的contour_width参数,作用是设置轮廓线宽度(默认为0),需要设置大于0的数字。
WordCloud中的contour_color参数,作用是设置轮廓线颜色(默认为黑色)。
代码:
wc = wordcloud.WordCloud(
口...
口contour_width = 5,
口contour_color = ‘pink')
5.有人觉得颜色不够贴合图片,想要更贴近图片的颜色?可以用到wordcloud库中的颜色生成器:ImageColorGenerator()来生成字体需要的颜色,括号中填写存储图片信息的变量,再把结果赋值给color_func参数。
代码:
image1 = Image.open(‘图片.jpg')
image2 = numpy.array(image1)
img_color = wordcloud.ImageColorGenerator(image2)
wc = wordcloud.WordCloud(
口...
口color_func = img_color)
##总代码##
from PIL import Image
import wordcloud
import numpy
text = ‘生日快乐,小明’
image = Image.open(‘图片.png’)
img = numpy.array(image)
img_color = wordcloud.ImageColorGenerator(img)
wc = wordcloud.WordCloud(
口font_path = ‘FZY4JW.TTF’,
口color_func = img_color,
口max_words = 100,
口repeat = True,
口contour_width = 5,
口contour_color = ‘pink’
)
wc.generate(text)
wc.to_file(‘文件.png’)
p = Image.open(‘文件.png’)
p.show()
【注】
repeat v. 重复
array v. 阵列
mask v. 隐藏
contour n. 轮廓
总感觉有点问题,但又没找出来。。。看看就好
.
词云还有很多用法,这里只讲了其中一部分简单的,可以上网搜索
第7章 词云(2)