Увеличьте разрешение с помощью облака слов и удалите пустую рамку

Я использую облако слов с некоторыми текстовыми файлами. Как изменить этот пример, если я хочу 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