使用词云提高分辨率并删除空边框
Increase resolution with word-cloud and remove empty border
如果我想 1) 提高分辨率和 2) 删除空白边框,我正在使用 word cloud with some txt files. How do I change this example。
#!/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, 'constitution.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
显示它时,它会缩放到绘图的大小 canvas,这是(默认情况下)大约 800x600 并且您再次失去质量。要解决此问题,您需要在调用 imshow
之前指定图形的大小,例如
plt.figure( figsize=(20,10) )
plt.imshow(wordcloud)
通过这样做,我可以成功创建一个 2000x1000 的高分辨率词云。
对于你的第二个问题(去除边框),首先我们可以将边框设置为黑色,这样它就不那么明显了,例如
plt.figure( figsize=(20,10), facecolor='k' )
您还可以使用tight_layout
缩小边框的大小,例如
plt.tight_layout(pad=0)
最终代码:
# Read the whole text.
text = open(path.join(d, 'constitution.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)
完成工作,在后台减少 space,删除多余的填充。
您可以使用方法 to_svg
并获得任意高的分辨率。
with open("Output.svg", "w") as text_file:
text_file.write(wc.to_svg())
通过将这两行附加到此 file 来尝试一个示例,结果非常棒。
(其他答案已经解决了边框问题,并且示例没有边框。)
如果您 运行 在提高分辨率的同时遇到应用程序变慢的问题,即。在 Web 应用程序中,WordCloud documentation 建议您使用 scale 参数以及 canvas' width & height参数以获得适用于您的用例的分辨率和响应时间。
如果我想 1) 提高分辨率和 2) 删除空白边框,我正在使用 word cloud with some txt files. How do I change this example。
#!/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, 'constitution.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
显示它时,它会缩放到绘图的大小 canvas,这是(默认情况下)大约 800x600 并且您再次失去质量。要解决此问题,您需要在调用 imshow
之前指定图形的大小,例如
plt.figure( figsize=(20,10) )
plt.imshow(wordcloud)
通过这样做,我可以成功创建一个 2000x1000 的高分辨率词云。
对于你的第二个问题(去除边框),首先我们可以将边框设置为黑色,这样它就不那么明显了,例如
plt.figure( figsize=(20,10), facecolor='k' )
您还可以使用tight_layout
缩小边框的大小,例如
plt.tight_layout(pad=0)
最终代码:
# Read the whole text.
text = open(path.join(d, 'constitution.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)
完成工作,在后台减少 space,删除多余的填充。
您可以使用方法 to_svg
并获得任意高的分辨率。
with open("Output.svg", "w") as text_file:
text_file.write(wc.to_svg())
通过将这两行附加到此 file 来尝试一个示例,结果非常棒。
(其他答案已经解决了边框问题,并且示例没有边框。)
如果您 运行 在提高分辨率的同时遇到应用程序变慢的问题,即。在 Web 应用程序中,WordCloud documentation 建议您使用 scale 参数以及 canvas' width & height参数以获得适用于您的用例的分辨率和响应时间。