web-dev-qa-db-ja.com

Word-cloudで解像度を上げ、空の境界線を削除します

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()
25
Bobo

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')

final Constitution wordcloud

59
mfitzp

画像をマスクとして使用する場合は、大きな画像を使用して画像の品質を向上させてください。

ここに私が使用したコードスニペットの例があります

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")
2
Silver

それは非常に簡単です、plt.tight_layout(pad=0)が仕事をし、バックグラウンドのスペースを減らし、余分なパディングを取り除きます。

0
Naved Ahmad