我们经常可以见到可视化表示的生动形象的词频图片,这便是词云,比如统计2019年的搜索热词,我们便可以把搜索量前十的词语做成词云图,搜索量越大,图中出现的词频数就越高,如此就可以生成鲜明的可视化词频图了,那么这样的图片如何通过python批量生成呢?
很幸运,python的wordcloud库为我们提供了现成的方法。
最简单的英文词云生成方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import matplotlib.pyplot as pltimport wordcloud dic={} f=open('source.txt' ,'r' ) for each in s: dic.update({each.strip():x}) x+=1 wc=wordcloud.WordCloud() wc.generate_from_frequencies(dic) plt.imshow(wc) plt.axis("off" ) plt.show() wc.to_file('result.jpg' )
效果如图所示
关键词重复多次的英文词云生成方法 完成最简单的词云后,我发现每个词语只会出现一次,于是在查阅资料后,我发现了repeat函数并作出以下修改。
1 2 3 4 wc.wordcloud.WordCloud( max_words=1000 , repeat=True )
效果如图所示:
有形状的英文词云生成方法 接下来就是解决词云形状的问题,即把词云变成风车形。此处用到PIL,munpy库和wordcloud库中的mask函数。
修改/添加如下:
1 2 3 4 5 6 7 mask = np.array(Image.open('logo.jpg' )) wc.wordcloud.WordCloud( mask=mask, background_color='white' , max_words=1000 , repeat=True )
mask函数使词云中字符的颜色与所提供图片对应位置的颜色相同,从而生成对应的紫、红、绿、蓝字符。为方便演示,此处作出如下修改:
1 2 3 4 5 wc.wordcloud.WordCloud( ...... background_color='black' , ...... )
效果如图所示:
可以看到原logo图的四色风叶位置生成了对应的四色字符,而logo图的白色背景位置也生成了对应的白色字符。
那么,要怎么去掉白色字符呢?答案很简单,只要让词云的背景色设置为白色,这些白色字符就会融入背景,看不出来了。
于是我们恢复之前的修改:
1 2 3 4 5 wc.wordcloud.WordCloud( ...... background_color='white' , ...... )
最终效果 最终效果如图所示:
还有一些细节部分,如词云图高度宽度的设置、字体的设置,此处就不一一细说,下面是完整的代码:
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 30 31 32 33 34 import wordcloudfrom PIL import Imageimport numpy as npimport matplotlib.pyplot as plt dic={} str='' x=0 f=open('source.txt' ) s=f.readlines() for each in s: dic.update({each.strip():x}) x+=1 mask = np.array(Image.open('logo.jpg' )) wc = wordcloud.WordCloud( height=2000 , width=2000 , collocations=False , font_path='C:/Windows/Fonts/simhei.ttf' , mask=mask, max_words=1000 , max_font_size=400 background_color='white' , repeat=True ) wc.generate_from_frequencies(dic) image_colors = wordcloud.ImageColorGenerator(mask) wc.recolor(color_func=image_colors) plt.imshow(wc) plt.axis('off' ) plt.show() wc.to_file('result.jpg' )