python词云mask需要的图_Python词云wordcloud——根据词语生成图像

wordcloud作者github应用实例:

https://github.com/amueller/word_cloud/blob/master/examples/masked.py

官网:https://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html

内容包括:生成中文词云、英文词云、根据单词出现频率生成词云

91a0cefbe586a582058c3d72ac01199b.png

参数设定

WordCloud可以直接pip安装,在Anaconda里python -m pip install SomePackage(包名)就可以安装。

WordCloud()部分常用参数

font_path:string字体,中文需要设定中文字体

width:int (default=400)宽

height:int (default=200)高

prefer_horizontal:float (default=0.90)水平与竖直排版比,小于1则将不合适水平词语竖直显示,大于1则只水平

mask:nd-array or None (default=None) 背景图,white (#FF or #FFFFFF)区域不能放词。

scale:float (default=1) 对大型词云用scale缩放比放大尺寸生成速度更快,但可能模糊

max_words:number (default=200)最大词量

stopwords:set of strings or None如果不设定停止词则使用默认STOPWORDS

background_color:color value (default=”black”)设置背景色

mode:string (default=”RGB”)设定RGBA则背景变为透明

wordcloud.WordCloud方法

我使用过的:

generate(text)Generate wordcloud from text.生成词云

to_file(filename)Export to image file. 保存图片

recolor([random_state, color_func, colormap])Recolor existing layout.对已有的词云重新配色(比重新生成某种颜色的词云快)

process_text(text)Splits a long text into words, eliminates the stopwords.返回统计文本中单词频率的dict

generate_from_frequencies(frequencies[, …])Create a word_cloud from words and frequencies.根据频率生成词云

没用过的:

fit_words(frequencies) Create a word_cloud from words and requencies.

generate_from_text(text)Generate wordcloud from text.

to_array()Convert to numpy array.

应用

注意:

1、词云每次随机生成,再次运行则生成新词云。

2、wordcloud.to_file(‘myfig.png’)的方法生成词云比plt.savefig更清楚,后者不能反映词云设置的大小等参数。

以下代码中text文件选择了分别包含林俊杰对的时间点的中英文歌词的两个txt,掩码图片选了一张白底png图片。

无背景词云

from wordcloud import WordCloud

import matplotlib.pyplot as plt

text = open('C:/Users/Violette/Desktop/data/As I believe.txt').read()#读入文本

wordcloud=WordCloud()

wordcloud.generate(text)

image=wordcloud.to_image()

plt.imshow(image) # 显示图片

plt.axis('off') # 不显示坐标轴

plt.savefig('C:/Users/Violette/Desktop/data/myfig.png')

plt.show()1

2

3

4

5

6

7

8

9

10

11

310dc3abd42074f48fd88a2239b55d2e.png

无背景频率词云

统计文本中单词出现的频率,频率越大的单词词云中字体越大。

用process_word()方法统计单词频率,返回dict

generate_from_frequencies(dict)方法生成频率词云

from wordcloud import WordCloud

import matplotlib.pyplot as plt

text = open('C:/Users/Violette/Desktop/data/As I believe.txt').read()#读入文本

wordcloud=WordCloud()

process_word=WordCloud.process_text(wordcloud,text)

print(process_word)

wordcloud.generate_from_frequencies(process_word)

image=wordcloud.to_image()

plt.imshow(image) # 显示图片

plt.axis('off') # 不显示坐标轴

plt.savefig('C:/Users/Violette/Desktop/data/myfig.png')

plt.show()1

2

3

4

5

6

7

8

9

10

11

12

13

在歌词中出现频率最高的词是’believe’: 8,‘know’: 8所以这两个词在图像中最大:

b5a5b83458d00c3290251596d9c6046d.png

背景词云

在图片mask上生成词云,多增加一步读入背景图并将图片转换为数组:

需要import的文件:

import numpy as np

from PIL import Image

需要将读取图像转为数组格式来进行后续操作:

mask_image=np.array(Image.opern(‘mask.png’))

wordcloud=WordCloud(background_color=“white”,width=600, max_words=100, mask=mask_image).generate(text)

如果需要转换颜色为mask颜色则:

from wordcloud import ImageColorGenerator

image_colors = ImageColorGenerator(mask_image)#提取颜色

wordcloud.recolor(color_func=image_colors)#重置颜色函数

使用recolor重置颜色,可以将词云在mask对应位置的字体颜色变为mask图片上的颜色。

完整代码:

from wordcloud import WordCloud, ImageColorGenerator#用于提取图片颜色

import numpy as np

from PIL import Image

import matplotlib.pyplot as plt

text = open('C:/Users/Violette/Desktop/data/As I believe.txt').read()#读入文本

images=Image.open('C:/Users/Violette/Desktop/data/heart.png')#读入背景图

mask_image=np.array(images)#图片转化为数组

#等价于mask_image = np.array(Image.open('C:/Users/Violette/Desktop/data/heart.png'))

wordcloud=WordCloud(background_color="white",width=600, max_words=100,

mask=mask_image).generate(text)#生成词云图

#提取mask颜色

image_colors = ImageColorGenerator(mask_image)

#wordcloud.recolor(color_func=image_colors)#重置颜色函数

image=wordcloud.to_image()

# 显示图像

fig,axes = plt.subplots(1,2)

axes[0].imshow(wordcloud)#不设置颜色

axes[1].imshow(wordcloud.recolor(color_func=image_colors))#将词云颜色设置为mask的颜色

for ax in axes:

ax.set_axis_off()#给每幅图都去坐标轴

plt.savefig('C:/Users/Violette/Desktop/data/myfig.png')

plt.show()1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

66b377e87ea9aa392d4161858111ec07.png

中文词云

关于读中文txt参考原文链接:https://blog.csdn.net/jingyi130705008/article/details/71513984

文中提到txt使用utf8编码的时候会默认在文件开头插入三个不可见字符,python定义为codecs.BOM_UTF8。

对python2.7:

读中文txt时必须先比较前三个字符与codecs.BOM_UTF8,如果一样就删除前三个字符然后再decode。

import codecs

data = open("Test.txt").read()

if data[:3] == codecs.BOM_UTF8:

data = data[3:]

print data.decode("utf-8")1

2

3

4

5

对python3:

读取文件时解码可以直接encoding=‘gbk’

调用WordCloud时,设定字体参数font_path

text = open('C:/Users/Violette/Desktop/data/chinese.txt',encoding='gbk').read()#读入txt格式中文文本

text = open('C:/Users/Violette/Desktop/liao_excel/classify_model1.csv',encoding='utf-8').read()#csv格式中文文本

wordcloud=WordCloud(font_path='C:/Windows/Fonts/simfang.ttf',background_color="white",width=600, max_words=100, mask=mask_image).generate(text)#生成词云图时需要设定字体参数font_path1

2

3

91a0cefbe586a582058c3d72ac01199b.png

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值