python - 我怎样才能使这个 matplotlib“词云”图更好看?
问题描述
为了学习,我正在开发这个词云程序,它计算一个词在文本中出现的次数,并将其打印成一种“词云”图像。
该程序运行良好,但我想解决一些美学问题,例如:
- 如何删除 x 轴和 y 轴上的数字?
- 是否可以完全移除轴?
- 有时,一个词将自己置于另一个词之上。有谁知道如何使单词不相互打印并使单词彼此相邻?
... 和...
有问题的代码是
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()
欢迎并感谢所有帮助。
解决方案
定义不带坐标轴刻度和标签的图形对象:
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()
为了使您的情节看起来与您提供的示例相似……无论您想怎么称呼它,都需要进行大量的手动插拔,反复试验;您必须为每个单词插入坐标,并确定您认为每个单词在 xy 坐标方面看起来最好的位置——一个提示是应该最后绘制最大的单词(即当 i == N - 1 时),而应该首先绘制最小的文本(即当 i == 0 时);这样,较大的文本将不会覆盖较小的文本。您还可以专注于具有足够距离的非重叠坐标,以使单词彼此之间不会太近 - 或者,如果您希望单词相互接触,您可以缩放它们重叠的程度一个其他。有一个随机化 RGB 列表的颜色图,以便颜色更“
推荐阅读
- python - 当我尝试运行文件时 Pythonw 崩溃
- c++ - C++ 类中的构造函数
- ios - 如何在屏幕之间执行干净的导航?
- python - 什么更 Pythonic:平凡的 lambda 或 None?
- ionic-framework - 安装 LocalNotification 插件时应用程序不工作
- google-bigquery - 将 Bigquery 中的表导出到 GCS 拆分大小
- shell - 码头工人 [ENTER] 标志
- php - Nexmo 将消息转发到我的号码
- python - 为什么官方的 docker python 镜像包含 GPG_KEY 环境变量?
- reactjs - 如何使用 React 的多个 axios 请求显示单独的图形?