大家好,我是java1234_小锋老师,最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts)视频教程,持续更新中,计划月底更新完,感谢支持。今天讲解基于wordcloud库实现词云图
视频在线地址:
2026版【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts+爬虫) 视频教程 (火爆连载更新中..)_哔哩哔哩_bilibili
课程简介:

本课程采用主流的Python技术栈实现,Mysql8数据库,Flask后端,Pandas数据分析,前端可视化图表采用echarts,以及requests库,snowNLP进行情感分析,词频统计,包括大量的数据统计及分析技巧。
实现了,用户登录,注册,爬取微博帖子和评论信息,进行了热词统计以及舆情分析,以及基于echarts实现了数据可视化,包括微博文章分析,微博IP分析,微博评论分析,微博舆情分析。最后也基于wordcloud库实现了词云图,包括微博内容词云图,微博评论词云图,微博评论用户词云图等功能。
基于wordcloud库实现词云图
词云(Word Cloud) 是一种文本数据可视化形式,通过不同大小、颜色和布局的词汇展示文本中的关键词频率。词汇出现频率越高,在词云中显示得越大、越突出。常用于快速识别文本主题、情感分析或数据摘要。

核心特点
-
视觉突出:高频词汇尺寸更大、更醒目
-
自定义灵活:支持形状、颜色、字体等深度定制
-
快速洞察:一眼识别文本核心主题
-
应用广泛:社交媒体分析、用户评论摘要、报告生成等
安装wordcloud库
pip install wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple
以下是 wordcloud.WordCloud
类构造方法的完整参数说明,掌握这些参数可以创建高度定制化的词云:
WordCloud(
# 核心参数
font_path=None, # 字体路径(解决中文显示必备)
width=400, # 图像宽度(像素)
height=200, # 图像高度(像素)
margin=2, # 边距(像素)
# 颜色与样式
background_color="black", # 背景色
colormap=None, # 颜色映射(如'viridis'/'plasma',与color_func二选一)
color_func=None, # 自定义颜色函数
# 文本处理
max_words=200, # 最大显示词数
stopwords=None, # 停用词集合
min_word_length=0, # 最小词长(过滤短词)
collocations=True, # 是否包含双词搭配(bigram)
# 字体控制
max_font_size=None, # 最大字体尺寸(自动计算)
min_font_size=4, # 最小字体尺寸
font_step=1, # 字体步进值(越大渲染越快)
relative_scaling=.5, # 词频缩放比例(0-1,1为线性)
# 布局与形状
mask=None, # 形状蒙版(numpy数组)
contour_width=0, # 轮廓线宽
contour_color='black',# 轮廓颜色
# 重复词处理
repeat=False, # 是否允许重复词
include_numbers=False, # 是否包含数字
normalize_plurals=True # 复数归一化(如word/words)
# 其他高级参数
prefer_horizontal=.9, # 水平词比例(0.9=90%词水平)
scale=1, # 图像缩放比例(>1提高分辨率)
random_state=None, # 随机种子(固定布局)
collocation_threshold=30, # 双词搭配阈值
mode="RGB", # 图像模式(RGB/RGBA)
)
常用参数详解
参数 | 说明 | 示例值 |
---|---|---|
width /height |
图片尺寸 | 800 , 400 |
background_color |
背景色 | "white" , "#000000" |
max_words |
最大词汇数量 | 200 |
colormap |
颜色映射 | "viridis" , "tab20" |
mask |
形状模板 | numpy数组 |
stopwords |
停用词表 | set(["a", "the"]) |
font_path |
字体路径 | "arial.ttf" |
下面是示例代码:
import sys
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
from wordcloud import WordCloud
sys.path.append('static')
if __name__ == '__main__':
text = "牛掰 牛逼 大佬 我去 张三 卡卡 嘿嘿 哈哈 生成 商城 气死我了 不去 就不要 好滴 骄傲 好的 大战 发展 求生 共存 火了 刘安 伙计 火鸡 打火机"
img = Image.open('article_mask.jpg') # 形状模版图片
img_arr = np.array(img) # 转成图片数组对象
wc = WordCloud(
width=800,
height=600,
background_color='white',
colormap='Blues',
font_path='STHUPO.TTF',
mask=img_arr
)
wc.generate_from_text(text)
# 绘制图片
plt.imshow(wc)
# 不显示坐标轴
plt.axis('off')
outImg = 'wordcloud_test.jpg'
plt.savefig('wordcloud_test.jpg', dpi=500)
我们可以封装下,做成一个生成词云图的工具方法genWordCloudPic(),其他地方就可以传参直接调用生成词云图。
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
from wordcloud import WordCloud
def genWordCloudPic(str, maskImg, outImg):
"""
生成云图
:param str: 词云 空格隔开
:param maskImg: 形状模版图片
:param outImg: 输出的词云图文件名
:return:
"""
img = Image.open(maskImg) # 形状模版图片
img_arr = np.array(img) # 转成图片数组对象
wc = WordCloud(
width=800,
height=600,
background_color='white',
colormap='Blues',
font_path='STHUPO.TTF',
mask=img_arr
)
wc.generate_from_text(str)
# 绘制图片
plt.imshow(wc)
# 不显示坐标轴
plt.axis('off')
plt.savefig(outImg, dpi=500)
if __name__ == '__main__':
text = "牛掰2 牛逼 大佬 我去 张三 卡卡 嘿嘿 哈哈 生成 商城 气死我了 不去 就不要 好滴 骄傲 好的 大战 发展 求生 共存 火了 刘安 伙计 火鸡 打火机"
genWordCloudPic(text, 'comment_mask.jpg', 'wordcloud_test2.jpg')
运行生成:
