Увеличете разделителната способност с 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()

person Bobo    schedule 28.02.2015    source източник


Отговори (4)


Не можете да увеличите разделителната способност на изображението в plt.show(), тъй като това се определя от вашия екран, но можете да увеличите размера. Това му позволява да мащабира, мащабира и т.н. без замъгляване. За да направите това, предайте размерите на WordCloud, напр.

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

Това обаче само определя размера на изображението, създадено от WordCloud. Когато покажете това с помощта на matplotlib, то се мащабира до размера на платното за графика, което е (по подразбиране) около 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')

окончателна конституция wordcloud

person mfitzp    schedule 01.03.2015

Ако се опитвате да използвате изображение като маска, уверете се, че използвате голямо изображение, за да получите по-добро качество на изображението.. Прекарах часове, за да разбера това.

Ето пример за кодов фрагмент, който използвах

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")
person Silver    schedule 25.10.2019

Много е просто, plt.tight_layout(pad=0) върши работата, намалява пространството на заден план, премахвайки излишната подложка.

person Naved Ahmad    schedule 19.11.2019

Размазани облаци от думи - борих се с това. За моя употреба открих, че твърде голяма разлика между най-често срещаните думи и тези с малко срещания оставя думите с по-нисък брой нечетими. Когато мащабирах по-честото броене, за да намаля разликата, всички думи с по-ниска честота бяха много по-четими.

person Jeff J.    schedule 18.10.2016