一、介绍

官方文档:http://amueller.github.io/word_cloud/index.html
词云也称为文字云、标签云,是指对文本中出现频率较高的关键词予以视觉上的突出,形成关键词词云层或关键词渲染。
安装:pip install wordcloud
image.png
绘制思路:
① 生成WordCloud词云对象,配置相关参数
② 加载词云文本
③ 输出图片文件

二、API参考

2.1 WordCloud

词云对象用于生成和绘制

  1. 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] 初始化

三、实例

  1. import jieba
  2. ##Matplotlib库是用于科学计算的数据可视化的第三方库
  3. import matplotlib.pyplot as plt
  4. from wordcloud import WordCloud
  5. txt = open("E:\\pythonstduy\\wenben\\sanshengsanshi.txt","r",encoding="utf-8").read()
  6. ##三生三世十里桃花人物
  7. namelist =["白浅","夜华","凤九","折颜","东华帝君","素锦","离镜","白真","阿离","司命",
  8. "玄女","胭脂","天君","擎苍","少辛","迷谷","叠风","令羽","连宋","浅浅","素素"]
  9. ##将主要人物添加到词典中
  10. for name in namelist:
  11. jieba.add_word(name)
  12. words = jieba.lcut(txt)
  13. word_split = "".join(words) ##以空格为分割符,连接分词后的所有词汇
  14. my_wordcloud =WordCloud(max_words=100,width=2600,height=1600,background_color="white",font_path='C:\\WINDOWS\\FONTS\\DENGL.TTF').generate(word_split) ##字体为微软雅黑
  15. plt.imshow(my_wordcloud) ##在坐标区域中显示绘制的词云图像
  16. plt.axis("off") ##不显示坐标轴标签
  17. plt.show() ##显示创建的绘图对象

image.png

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

image.png