wordcloud 默认按空格分词,中文需先用 jieba 分词并拼接为空格字符串;必须指定支持中文的 font_path,否则显示方块;停用词需预处理;可直接用 generate_from_frequencies 传词频字典。

WordCloud 默认只认空格分词,中文文本直接喂进去会变成单字云,不是你要的“词语”云。
中文文本必须先分词,不能直接传 raw_text 给 WordCloud
Python 的 WordCloud 底层用空格切词,对中文无效。直接传一段中文,它会把每个汉字当一个“词”,导致云图全是单字、毫无语义。
- 正确做法:先用
jieba(或其他分词库)切出词语,再拼成空格分隔的字符串 - 别用
jieba.lcut(text)后直接传列表——WordCloud只接受字符串 - 推荐用
" ".join(jieba.lcut(text)),确保词间是英文空格,不是全角空格或换行 - 停用词要提前过滤,否则“的”“了”“在”会霸屏——
WordCloud的stopwords参数只过滤完全匹配,不支持正则或部分匹配
font_path 必须指定,否则中文显示为方块
默认字体不支持中文,所有汉字渲染成 □。这不是编码问题,是字体缺失。
- Windows 下常用:
font_path="simhei.ttf"(黑体),路径需存在,建议用绝对路径或matplotlib.font_manager.findfont查找 - macOS 可试:
font_path="/System/Library/Fonts/PingFang.ttc" - Linux 一般装
fonts-wqy-zenhei包,路径类似/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc - 没配对就报
OSError: cannot open resource,不是代码错,是路径或权限问题
词频数据可绕过分词,直接用 generate_from_frequencies()
如果你已有清洗好的词频字典(比如 {"人工智能": 128, "模型": 94}),不用走分词流程。
- 直接调
wc.generate_from_frequencies(word_freq_dict) - 注意键必须是字符串,值必须是数字(int/float),不能是
Counter对象本身,得转成 dict - 此时
font_path和stopwords仍需设置,但max_words、collocations等分词相关参数无效 - 比
generate()更可控,适合从 pandasvalue_counts()或 TF-IDF 输出直接对接
最常被跳过的细节:mask 图像必须是灰度图(L 模式)或单通道 numpy array,RGB 图扔进去不会报错但形状全乱;另外,词频极低的词哪怕没进 max_words 也会被裁掉——这不是 bug,是设计如此。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











