【发布时间】:2022-01-19 09:19:11
【问题描述】:
我正在使用wordcloud==1.8.1 来渲染具有多个词云的情节,
每个人都在条形图中成为一个条形。
基本上只是像这样添加一些子图:
subplot = plt.subplot(1, len(ontologies), i, anchor='S')
subplot.set_title(title, size=10, y=-0, pad=-25)
subplot.set_ymargin(50)
plt.plot()
cloud = WordCloud(
font_path=f'{current_dir}/assets/source-sans-pro.ttf',
background_color='white',
width=width,
height=height,
# max_words=30,
prefer_horizontal=0.99,
color_func=lambda *args, **kwargs: colors[ontology_name]
)
plt.imshow(cloud.generate_from_frequencies(
frequencies
#max_font_size=200,
#min_font_size=10,
))
plt.axis("off")
是否有可能在所有字云中获得正确的相对字体大小?在同一个词云中,它们只是相对于彼此的那一刻。
我尝试根据频率动态设置min_font_size 和max_font_size,但这些似乎并不影响关系...
因此,如果一个单词在文档中出现的频率比其他单词高 10 倍,我希望它的字体比所有其他单词大 10 倍。无论在哪个 wordcloud 中。
frequencies 只是单词出现总数的字典:
wordcloud 1 (200x400) {'word1': 10, 'word2': 40}
词云 2 (200x600) {'word3': 20, 'word4': 80}
词云 2 (200x800) {'word5': 40, 'word6': 160}
那么,如何从中创建 3 个 wordcloud 并保持比例,使 wordcloud 3 中的 word6 比 wordcloud 1 中的 word1 大 16 倍?
【问题讨论】:
-
您没有在 sn-p 中定义
frequencies,但大概您可以更改每个频率中的总体,以便它们都归一化为同一事物。还有relative_scaling,您也许可以根据人口进行修改。 -
您应该将
relative_scaling设置为1,以便字体大小与频率(每个文档)成正比。默认为0.5,它根据频率和排名确定字体大小,请参阅source。使用1,第二个和变为零。 -
非常感谢。那么我只需要根据当前的 wordcloud 维度来缩放频率?
-
(用更多数据更新了问题...)
-
事实证明这似乎是不可能的,因为
generate_from_frequencies不采用 frequencies 而是 counts 并在内部计算相对于字典中计数最高的单词的频率,因此您无法相对于彼此缩放不同的字数字典。我在上面删除了错误的 cmets。
标签: python matplotlib word-cloud