Python 制作个性化形状的云词

###1.先上图

这是一张我介绍的云词图。
(由这张图可以给人的信息:作者叫,专业:人文地理,学校湖南,擅长于Pyhon,PS,arcgis等等,可能和挑战杯,乡村聚落等打过交道,其他信息就不多赘述了,总而言之,在大数据及信息化的今天,用这样一张云词图,可以很好的对人或物品做介绍)
分析我这张的图需求,也就是做这张图的要求及目标:
第一:自定义形状
第二:词条长短不一
第三:词的内容具有不确定性
第四:每个词具有特定的权重大小
所以以上四点决定着最终表达效果的成败。

###2、使用工具:Pycharm+ps
###3、上代码

# -*- coding: utf-8 -*-
__author__ = 'xiaosu'
# wordcloud 生成中文词云
from os import path
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from 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渲染一下

你可能感兴趣的:(数据可视化表达)