###1.先上图
这是一张我介绍的云词图。
(由这张图可以给人的信息:作者叫,专业:人文地理,学校湖南,擅长于Pyhon,PS,arcgis等等,可能和挑战杯,乡村聚落等打过交道,其他信息就不多赘述了,总而言之,在大数据及信息化的今天,用这样一张云词图,可以很好的对人或物品做介绍)
分析我这张的图需求,也就是做这张图的要求及目标:
第一:自定义形状
第二:词条长短不一
第三:词的内容具有不确定性
第四:每个词具有特定的权重大小
所以以上四点决定着最终表达效果的成败。
###2、使用工具:Pycharm+ps
###3、上代码
# -*- coding: utf-8 -*-__author__ = 'xiaosu'# wordcloud 生成中文词云from os import pathfrom wordcloud import WordCloudimport matplotlib.pyplot as pltfrom scipy.misc import imread# 绘制词云def draw_wordcloud():d = path.dirname(__file__) # 当前文件文件夹所在目录frequencies = {u'....':1,u'地理信息系统 ':0.4,u'人文地理':0.6,u'乡村振兴':0.3,u'聚落 ':0.2,u'城乡交通':0.4,u'长株潭 ':0.4,u'城乡一体化 ':0.4,u'区域科学 ':0.2,u'C语言':0.2,u'Gephi ':0.2,u'Photoshop ':0.3,u'挑战杯 ':0.3,u'Office ':0.4,u'AutoCAD':0.3,u'Spss ':0.3,u'Coredraw':0.2,u'湖 ':0.6,u'湖南省政府发展研究中心':0.06,u'湖南省经济地理研究所':0.06,u'长沙市规':0.06,u'一':0.2} #只放了一部分词,可按格式扩展词汇量color_mask = imread("hunan.jpg") # 读取背景图片cloud = WordCloud(# 设置字体,不指定就会出现乱码font_path="STSONG.TTF",# 设置背景色background_color='black',# 词云形状mask=color_mask,#允许最大词汇max_words=2000,#最大号字体max_font_size=200,min_font_size=50 #最小号字体)word_cloud = cloud.fit_words(frequencies) # 产生词云word_cloud.to_file("hunanT2.jpg") # 保存图片# 显示词云图片plt.imshow(word_cloud)plt.axis('off')plt.show()if __name__ == '__main__':draw_wordcloud()
###4.代码解释: (基本的语法就不介绍了)
主要讲为什么这样写:
1.为什么用frequencies 而不用jieba模块分割TXT文件内容?
a、frequencies 能记录我指定词汇和想要的权重
b、我不能写一篇自我介绍的TXT,再用jieba去分割词汇吧。用jieba不能去分割出较长的特定的名字(可能是我不会),还有分解出的词汇也不会有我想要的权重。
2.如何指定特定形状?
WordCloud这个库还是蛮强大的,在生成词云前,可以通过 color_mask指定 图片格式的形状,默认是图片中有色的区域是掩膜。
3.frequencies里的随着词汇的增多,敲的代码也多,怎样提速?
词汇还是得一个个敲,但是可以在Excel中敲,然后给了权重,借助Excel函数批量整理成[u’地理信息系统 ':0.4,] 的格式,然后直接复制到代码中。
4.生成词云效果不理想?
词云生成是随机的,也就是说词的位置颜色是随机的,可以多生成几次,然后PS渲染一下