Word cloud を一部の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, 'constitution.txt')).read()
wordcloud = WordCloud().generate(text)
# Open a plot of the generated image.
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
plt.show()
の画像のresolutionは画面によって決定されるため、増やすことはできませんが、サイズを増やすことはできます。これにより、ぼかすことなく、拡大縮小、ズームなどを行うことができます。これを行うには、ディメンションをWordCloud
に渡します。
wordcloud = WordCloud(width=800, height=400).generate(text)
ただし、これはWordCloud
によって作成されたイメージのサイズを決定するだけです。これをmatplotlib
を使用して表示すると、プロットキャンバスのサイズ(デフォルトでは約800x600)にスケーリングされ、再び品質が低下します。これを修正するには、imshow
を呼び出す前に、Figureのサイズを指定する必要があります。
plt.figure( figsize=(20,10) )
plt.imshow(wordcloud)
これを行うことで、2000x1000の高解像度のWordクラウドを作成できます。
2番目の質問(境界線の削除)では、最初に境界線を黒に設定することができます。
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()
最後の2行を次のように置き換えると、以下に示す最終出力が得られます。
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)
が仕事をし、バックグラウンドのスペースを減らし、余分なパディングを取り除きます。