一、介绍
官方文档:http://amueller.github.io/word_cloud/index.html
词云也称为文字云、标签云,是指对文本中出现频率较高的关键词予以视觉上的突出,形成关键词词云层或关键词渲染。
安装:pip install wordcloud
绘制思路:
① 生成WordCloud词云对象,配置相关参数
② 加载词云文本
③ 输出图片文件
二、API参考
2.1 WordCloud
词云对象用于生成和绘制
classwordcloud.WordCloud(font_path=None, width=400, height=200, margin=2, ranks_only=None, prefer_horizontal=0.9, mask=None, scale=1, color_func=None, max_words=200, min_font_size=4, stopwords=None, random_state=None, background_color='black', max_font_size=None, font_step=1, mode='RGB', relative_scaling='auto', regexp=None, collocations=True, colormap=None, normalize_plurals=True, contour_width=0, contour_color='black', repeat=False, include_numbers=False, min_word_length=0, collocation_threshold=30)[source]
2.1.1 参数
| 参数 | 类型 | 说明 |
|---|---|---|
| font_path | string | 使用的字体(OTF或TTF)路径。 在Linux机器上,默认为DroidSansMono路径。 ps:中文词云必须设置该参数 |
| width | int (default=400) | 画布的宽度,整数类型 |
| height | int (default=200) | 画布的高度,整数类型 |
| prefer_horizontal | float (default=0.90) | 词语水平方向排版出现的频率,默认为0.9 |
| mask | nd-array or None (default=None) | 如果为空,则使用二维遮罩绘制词云 如果为非空,设置的宽高值将被忽略,遮罩形状被mask取代,全白的部分将不会绘制,其余部分会用于绘制词云 |
| contour_width | float (default=0) | 如果mask不为None且轮廓宽度> 0,则绘制遮罩轮廓。 |
| contour_color | color value (default=”black”) | 遮罩轮廓颜色。 |
| scale | float (default=1) | 按照比例进行放大画布,eg:设置为1.5,则长和宽都是原来画布的1.5倍 |
| min_font_size | int (default=4) | 使用的最小字体大小。如果没有足够的空间,此空间将停止。 |
| font_step | int (default=1) | 字体的步长。font_step> 1可能会加快计算速度,但拟合效果较差。 |
| max_words | number (default=200) | 显示词语的最大数据 |
| stopwords | set of strings or None | 屏蔽词,如果为空,则使用内置的STOPWORDS列表。 |
| background_color | color value (default=”black”) | 词云的背景色 |
| max_font_size | int or None (default=None) | 显示的最大字号 |
| min_font_size | int or None (default=None) | 显示的最小字号 |
| color_func | callable, default=None | 生成新颜色的函数,如果为空,则使用self.color_func |
| colormap | string or matplotlib colormap, default=”viridis” | 给每个单词随机分配颜色,如果指定color_func,则忽略该方法 |
2.1.2 方法
| 方法 | 说明 |
|---|---|
| fit_words(frequencies) | 根据单词和频率创建一个word_cloud |
| generate(text) | 从文本生成wordcloud |
| generate_from_frequencies(frequencies[, …]) | 根据词语和频率生成词云,从文本生成wordcloud |
| generate_from_text(text) | 从文本生成wordcloud |
| process_text(text) | 将长文本拆分为单词,消除停用词 |
| recolor([random_state, color_func, colormap]) | 重新着色现有的布局,速度笔重新生成整个词云快。 random_state:如果非空,会使用固定的随机状态,如果给出一个整数,它会倍用作random.Random状态的一个种子 color_func:生成新颜色的函数,如果为空,则使用self.color_func |
| to_array() | 转换为numpy数组 |
| to_file(filename) | 导出到图像文件 |
| to_svg([embed_font, optimize_embedded_font, …]) | 导出到SVG |
2.2 wordcloud.ImageColorGenerator
wordcloud.ImageColorGenerator(image,default_color = None)
基于彩色图像的颜色生成器。
根据RGB图像生成颜色。单词将使用彩色图像中包围矩形的平均颜色进行着色。
2.2.1 参数
| 参数 | 说明 |
|---|---|
| image | nd-array, shape (height, width, 3) 用于生成文字颜色的图像。Alpha通道将被忽略。该尺寸应与画布相同。 |
| default_color | tuple or None, default=None 画布大于图像时使用的后备颜色,格式为(r,g,b)。如果为None,则引发ValueError。 |
2.2.2 方法
| 方法 | 说明 |
|---|---|
| call(word, font_size, font_path, …) | 使用固定图像为给定单词生成颜色。 |
| init(image, default_color=None)[source] | 初始化 |
三、实例
import jieba##Matplotlib库是用于科学计算的数据可视化的第三方库import matplotlib.pyplot as pltfrom wordcloud import WordCloudtxt = open("E:\\pythonstduy\\wenben\\sanshengsanshi.txt","r",encoding="utf-8").read()##三生三世十里桃花人物namelist =["白浅","夜华","凤九","折颜","东华帝君","素锦","离镜","白真","阿离","司命","玄女","胭脂","天君","擎苍","少辛","迷谷","叠风","令羽","连宋","浅浅","素素"]##将主要人物添加到词典中for name in namelist:jieba.add_word(name)words = jieba.lcut(txt)word_split = "".join(words) ##以空格为分割符,连接分词后的所有词汇my_wordcloud =WordCloud(max_words=100,width=2600,height=1600,background_color="white",font_path='C:\\WINDOWS\\FONTS\\DENGL.TTF').generate(word_split) ##字体为微软雅黑plt.imshow(my_wordcloud) ##在坐标区域中显示绘制的词云图像plt.axis("off") ##不显示坐标轴标签plt.show() ##显示创建的绘图对象

from os import pathfrom PIL import Imageimport numpy as npimport jiebaimport matplotlib.pyplot as pltimport ostxt = open("E:\\pythonstduy\\wenben\\sanshengsanshi.txt","r",encoding="utf-8").read()##三生三世十里桃花人物namelist =["白浅","夜华","凤九","折颜","东华帝君","素锦","离镜","白真","阿离","司命","玄女","胭脂","天君","擎苍","少辛","迷谷","叠风","令羽","连宋","浅浅","素素"]##将主要人物添加到词典中for name in namelist:jieba.add_word(name)words = jieba.lcut(txt)word_split = "".join(words) ##以空格为分割符,连接分词后的所有词汇from wordcloud import WordCloud, STOPWORDS##创建遮罩alice_mask = np.array(Image.open("E:\\pythonstduy\\image\\lhuan.png"))wc = WordCloud(background_color="white", max_words=2000, mask=alice_mask, contour_width=3, contour_color='steelblue',font_path='C:\\WINDOWS\\FONTS\\DENGL.TTF')# generate word cloudwc.generate(word_split)# store to filewc.to_file(path.join("E:\\pythonstduy\\image\\", "alice.png"))# showplt.imshow(wc, interpolation='bilinear')plt.axis("off")plt.figure()plt.imshow(alice_mask, cmap=plt.cm.gray, interpolation='bilinear')plt.axis("off")plt.show()

