使用Python生成词云图是文本可视化分析的常用手段,核心依赖wordcloud库,配合jieba分词、matplotlib展示等工具,就能快速实现从文本到词云的转换。

环境准备与安装
首先需要安装所需的第三方库,核心库为wordcloud,处理中文文本需要jieba分词库,展示结果需要matplotlib库,执行以下命令即可完成安装:
pip install wordcloud jieba matplotlib
基础词云生成流程
生成词云的核心步骤分为四步:准备文本数据、处理文本(中文需要分词)、生成词云对象、展示或保存词云图。下面通过一个英文文本的例子演示基础流程:
# 导入所需库
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 准备文本数据
text = "Python is a popular programming language. Python is easy to learn. Python is widely used in data analysis and machine learning."
# 创建词云对象,设置基本参数
wc = WordCloud(width=800, height=400, background_color="white")
# 生成词云
wc.generate(text)
# 展示词云图
plt.figure(figsize=(10, 5))
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
# 保存词云图到本地
wc.to_file("basic_wordcloud.png")
中文词云生成注意事项
中文文本和英文不同,没有天然的空格分隔词汇,直接使用wordcloud生成会出现乱码和分词错误,需要先使用jieba进行分词处理,同时指定支持中文的字体路径,避免中文显示为方框。
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 中文文本数据
chinese_text = "Python是一门非常流行的编程语言,Python语法简洁易学,在数据分析、人工智能、Web开发等领域都有广泛应用。"
# 使用jieba分词,用空格连接分词结果
seg_list = jieba.lcut(chinese_text)
processed_text = " ".join(seg_list)
# 创建词云对象,指定中文字体路径,Windows系统一般在C:WindowsFontsmsyh.ttc,Mac系统可指定/System/Library/Fonts/PingFang.ttc
wc = WordCloud(
width=800,
height=400,
background_color="white",
font_path="msyh.ttc", # 替换为你的中文字体实际路径
collocations=False # 关闭重复词对统计,避免重复展示
)
# 生成词云
wc.generate(processed_text)
# 展示结果
plt.figure(figsize=(10, 5))
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
常用参数配置说明
wordcloud提供了丰富的参数用于自定义词云样式,以下是常用参数的说明:
| 参数名 | 参数说明 | 默认值 |
|---|---|---|
| width | 词云图的宽度,单位为像素 | 400 |
| height | 词云图的高度,单位为像素 | 200 |
| background_color | 词云图的背景颜色 | black |
| font_path | 字体文件路径,中文必须指定 | None |
| max_words | 显示的最大词汇数量 | 200 |
| colormap | 词云的颜色映射,可选值参考matplotlib的colormap | viridis |
| mask | 掩码数组,用于指定词云的形状,传入二维数组即可 | None |
自定义词云形状
如果需要生成特定形状的词云,可以使用mask参数,先读取一张黑白形状的图片,将图片转换为数组作为掩码传入即可。注意图片的白色部分会作为留白区域,非白色部分会填充词汇。
import numpy as np
from PIL import Image
from wordcloud import WordCloud
import jieba
import matplotlib.pyplot as plt
# 读取形状图片,转换为数组
mask_image = np.array(Image.open("shape.png")) # 替换为你的形状图片路径
# 准备中文文本并处理
text = "数据可视化 词云图 Python wordcloud 中文分词 数据分析 机器学习 人工智能"
seg_list = jieba.lcut(text)
processed_text = " ".join(seg_list)
# 创建词云对象,传入mask参数
wc = WordCloud(
background_color="white",
font_path="msyh.ttc", # 替换为你的中文字体路径
mask=mask_image,
max_words=100,
colormap="rainbow"
)
# 生成并展示词云
wc.generate(processed_text)
plt.figure(figsize=(10, 10))
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
常见问题解决
- 中文显示为方框:没有指定
font_path参数,需要设置为系统中存在的中文字体路径。 - 分词结果不准确:可以使用jieba的
add_word方法添加自定义词汇,或者加载自定义词典提升分词准确率。 - 词云形状不符合预期:检查mask图片的黑白对比是否清晰,白色区域为留白,非白色区域才会填充词汇。