用 Python 词云图让所有字大小一致

词云图默认根据词频调整字号——频次高的字大、频次低的字小。但实际场景中(签名墙、姓名拼图、Logo 文字),我们经常需要所有字大小完全一致

本文教您 4 行核心代码搞定。

一、传统词云的问题

直接用 wordcloud 库生成时,字号由频次决定

1
2
3
from wordcloud import WordCloud
wc = WordCloud(font_path='PingFang.ttc', width=1200, height=800)
wc.generate_from_frequencies({'人工智能': 100, '机器学习': 50, '深度学习': 1})

结果:’人工智能’ 字最大,’深度学习’ 几乎看不见。

二、4 行核心代码

要让所有字大小一致,关键是手动锁定 min_font_sizemax_font_size

1
2
3
4
5
6
7
freq = {w: 1 for w in words}              # ① 所有词频强制设为相同值
wc = WordCloud(
...
min_font_size=80, # ② 最小字号 = 目标字号
max_font_size=80, # ③ 最大字号 = 目标字号
)
wc.generate_from_frequencies(freq) # ④ 生成

就这么简单。wordcloud 内部用 min_font_size == max_font_size 时,算出的字号全部等于这个值

三、完整代码(30 行带 GUI)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 1) 准备文本
text = """人工智能正在改变世界。深度学习让机器能够理解图像。
机器学习让计算机自我进化。算法是程序的灵魂。"""

# 2) 分词
words = [w.strip() for w in jieba.lcut(text) if len(w.strip()) > 1]

# 3) ★ 等字号词云:所有词频=1 + 锁定字号
freq = {w: 1 for w in words}

wc = WordCloud(
font_path='/System/Library/Fonts/PingFang.ttc',
width=1200, height=800,
background_color='#0a0a1a',
min_font_size=40, # ← 关键:锁定 40
max_font_size=40, # ← 关键:锁定 40
color_func=lambda *a, **k: '#00d4ff', # 青色字
prefer_horizontal=1.0,
).generate_from_frequencies(freq)

# 4) 保存
wc.to_file('wordcloud_equal.png')
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

四、应用场景

场景 字号选择 颜色
700+ 姓名拼字 25~65 白字 + 红底
等字号词云 40~80 任意彩色
文字 Logo 60~120 单色
海报文字 80~150 渐变

五、常见问题

Q: 怎么让字更密?
A: 增大 max_words + 缩小字号。

Q: 中文字体显示为方框?
A: 一定要传 font_path,并用支持中文的字体(PingFang.ttc / 微软雅黑 / Noto Sans CJK)。

Q: 可以导出 SVG 矢量吗?
A: 可以!用 potrace 把 PNG 转 SVG,详情见我们 主页商品区

六、相关商品

需要现成的”等字号词云”软件?查看我们的 词云图生成器 ¥35


本文由 小朵科技工作室原创,专注 Python 文本分析工具开发。