我怎样才能使这个matplotlib的“单词云”图看起来更好?

6ss1mwsb  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(119)

为了学习,我正在做一个单词云程序,它可以计算一个单词在文本中出现的次数,然后把它打印成一种“单词云”的图像。
程序运行良好,但我想解决一些美学问题,如:
1.如何删除x轴和y轴上的数字?
1.是否可以完全移除轴?
1.有时候一个单词会重叠在另一个单词上。有谁知道如何让单词不重叠,而是让单词彼此相邻?

打印输出为

...还有...

我希望它看起来像这样(或至少尽可能接近它)

问题代码为

filename = "adventure.txt"
infile = open(filename)

wordcounts = {}

for line in infile:
    words = line.split()
    for word in words:
        w = "".join([e for e in word if e.isalpha()])
        w = w.lower()

        if w in wordcounts:
            wordcounts[w] = wordcounts[w] + 1
        else:
            wordcounts[w] = 1

#Put all words in list and sort counts
words = list(wordcounts.keys())                 
words.sort(key=lambda x:wordcounts[x], reverse=True)

import matplotlib.pyplot as plt
import numpy as np

#Set maximum fornt size to 50
scale = 50/wordcounts[words[1]]

#Set up empty plot with limits on x-axis and y-axis
plt.axes(xlim=(0,100), ylim=(0,100) )

#Plot 50 most frequent words with size=frequency

N = min(len(words), 50)
for i in range(0,N):
    x = np.random.uniform(0,90)
    y = np.random.uniform(0,90)
    freq = wordcounts[words[i]]
    col =["r", "g", "b", "m", "c", "k"][i % 5]
    plt.text(x, y, words[i], fontsize=scale * freq, color=col)
plt.show()

所有的帮助是欢迎和赞赏。

k10s72fa

k10s72fa1#

定义不带轴记号和标签的地物对象:

fig = plt.figure(figsize=(10, 10), num=1, clear=True)
ax = plt.subplot(1, 1, 1, xticks=[], yticks=[], frameon=False)

删除此行:

plt.axes(xlim=(0,100), ylim=(0,100) )

结束行:

for i in range(0,N):
    x = np.random.uniform(0,90)
    y = np.random.uniform(0,90)
    freq = wordcounts[words[i]]
    col =["r", "g", "b", "m", "c", "k"][i % 5]
    ax.text(x, y, words[i], fontsize=scale * freq, color=col)
plt.show()

为了使你的图看起来像你提供的例子…它需要大量的手动插拔,试验和错误,无论你想叫它;你必须为每个单词插入坐标,并决定你认为每个单词在x-y坐标中看起来最好的位置-一个技巧是最大的单词应该最后绘制(即当i == N - 1时),而最小的文本应该首先绘制(即当i == 0时);这样,较大的文本就不会有较小的文本覆盖它。你也可以专注于有足够距离的非重叠坐标,这样单词就不会太靠近彼此-或者,如果你想让单词接触,你可以调整它们彼此重叠的程度。有一个随机化RGB列表的色彩Map表,这样颜色就更“分散”了(而不是让所有的黄色文本在右上角例如)。也许中心的较大的文本和有较小的文本更多的外围。名单继续下去,但我想你得到的想法。

相关问题