Python使用wordcloud创建词云示例集锦:

我正在将词云与一些txt文件一起使用。如果要:1)提高分辨率。2)删除空白边框,如何更改此示例。

#!/usr/bin/env python2
"""
Minimal Example
===============
Generating a square wordcloud from the US constitution using default arguments.
"""

from os import path
import matplotlib.pyplot as plt
from wordcloud import WordCloud

d = path.dirname(__file__)

# Read the whole text.
text = open(path.join(d, 'linuxmi.txt')).read()
wordcloud = WordCloud().generate(text)
# Open a plot of the generated image.
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

由于这取决于您的屏幕,因此无法提高图像的分辨率plt.show(),但是可以增加尺寸。这样就可以缩放,缩放等,而不会模糊。为此,将尺寸传递给WordCloud,例如

wordcloud = WordCloud(width=800, height=400).generate(text)

但是,这仅确定由创建的图像的大小WordCloud。当您使用matplotlib它显示时,它会缩放到绘图画布的大小(默认情况下约为800×600),从而再次失去质量。为了解决这个问题,您需要在调用之前指定图形的大小imshow,例如

plt.figure( figsize=(20,10) )
plt.imshow(wordcloud)

通过这样做,我可以成功创建2000×1000高分辨率字云。

对于您的第二个问题(删除边框),我们首先可以将边框设置为黑色,因此不太明显,例如

plt.figure( figsize=(20,10), facecolor=’k’ )

您也可以使用来缩小边框的大小tight_layout,例如

plt.tight_layout(pad=0)

最终代码:

from os import path
import matplotlib.pyplot as plt
from wordcloud import WordCloud

d = path.dirname(__file__)

# Read the whole text.
text = open(path.join(d, 'linuxmi.txt')).read()
wordcloud = WordCloud(width=1600, height=800).generate(text)
# Open a plot of the generated image.

plt.figure( figsize=(20,10), facecolor='k')
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()

通过将以下两行替换为以下内容,您可以得到如下所示的最终输出:

plt.savefig(‘wordcloud.png’, facecolor=’k’, bbox_inches=’tight’)

如果您尝试使用图像作为遮罩,请确保使用大图像以获得更好的图像质量。

这是我使用的代码段的示例

mask = np.array(Image.open('path_to_your_image'))
image_colors = ImageColorGenerator(mask)
wordcloud = WordCloud(width=1600, height=800, background_color="rgba(255, 255, 255, 0)", mask=mask
                     ,color_func = image_colors).generate_from_frequencies(x)

# Display the generated image:
plt.figure( figsize=(20,10) )
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")

这非常简单,plt.tight_layout(pad=0)可以完成工作,减少背景空间,消除多余的填充。

模糊的wordclouds-我一直在努力解决这个问题。就我的使用而言,我发现出现频率最高的单词与出现频率极低的单词之间的差异太大,导致较低数量的单词难以理解。当我对更频繁的计数进行缩放以减小差异时,所有低频单词的可读性都更高。

更新:

解决中文乱码:

from os import path
import matplotlib.pyplot as plt
from wordcloud import WordCloud

d = path.dirname(__file__)

# Read the whole text.
text = open(path.join(d, 'linuxmi.txt')).read()
wordcloud = WordCloud(font_path="simhei.ttf",background_color="black", width=800, height=860, margin=2).generate(text)

# Open a plot of the generated image.

plt.figure( figsize=(20,10), facecolor='k')
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()

效果图如下:

发表评论

电子邮件地址不会被公开。 必填项已用*标注