对于行研报告、咨询报告以及路演 ppt 而言,图表“颜值”有着至关重要的作用。多次行研实习的我,别的本领没学会,对排版和图表“颜值”的要求却被惯得越来越高。So,词云这个如此方便的可视化利器,怎么可以放过。
(CSDN 排版让人满意真的好难)
本文用到的jieba和wordcloud库比较朴素,不像ta-lib容易出幺蛾子,可以直接在 cmd 或 自己创建的环境中用 pip 安装。但是我个人在安装wordcloud库的过程中,出现了安装不成功的小概率事件,故在此提供一个解决方案。
当普通的pip安装不成功时,可以考虑到 Python库大本营 下载需要的库文件(.whl)到本地,之后再 pip install 库文件本地存储路径 进行安装。该方法通用性较广,其他库下载安装不成功时,也可以尝试该方法。
pip install jieba
pip install wordcloud
pip install "F:\Program_Files\wordcloud-1.7.0-cp38-cp38-win_amd64.whl" # 这是我随便找的路径,给大家打个样,换成自己的就ok
import jieba
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
text = open('三国.txt', "r",encoding='utf-8').read() # 文件读取
cut_text = jieba.lcut(text) # 结巴分词,生成列表
result = " ".join(cut_text) # 必须给个符号将分隔开的词重新拼成字符串,否则不能绘制词云
不管是哪种词云图,基本流程都是一致的,创建WordCloud对象,generate生成词云,to_file()保存词云。我们需要关注的是创建WordCloud对象过程中需要的参数,常用参数展示如下。重点说明两个:1) font_path,可以到“控制面板——外观和个性化——字体” 中找到心仪的字体文件,复制到当前py文件的同一路径下,这样路径不会太长,好看一点;2) colormap,指定色系,下面左图是不加colormap参数的效果,右图是加colormap='Blues’的效果。如果不知道colormap都有哪些,可以随便写一个错的运行,报错信息中会列示colormap们(最下面的图)。
wc = WordCloud(
background_color='white', # 设置背景色
mode = 'RGBA', # 默认为“RGB”
width=500, # 设置背景宽,默认为400像素
height=350, # 设置背景高,默认为200像素
max_font_size=50, # 最大字体
min_font_size=10, # 最小字体
font_path='simkai.ttf', # 由于要显示中文,需要设置字体,否则会出现乱码
max_words = 200, # 最大词汇个数
# colormap='Blues' # 指定词云色系,默认随机分配颜色
)
wc.generate(result) # 产生词云
wc.to_file("./image/wordcloud_1.png") # 保存图片
特定形状型实际上是以特定图片为蒙版制作,处理较为简单,只需要在前面一版的基础上加图片读取和mask参数即可完成。推荐使用色彩对比鲜明的图片,这样词云图可以与原图更相似,还可以通过调参绘制出更为美观的词云图。在这里我想说明一点的是,之前看许多大佬的文章,蒙版创建都是用PIL库,后来发现其实更为大家熟悉的 plt 也能实现同样的功能。
bg_img = plt.imread('./image/男生.jpeg')
wc = WordCloud(
background_color='white',
max_font_size=50,
min_font_size=10,
font_path='simkai.ttf',
colormap='Blues',
mask=bg_img
)
wc.generate(result)
wc.to_file("./image/wordcloud_2.png")
不仅想用特定图片的形状,还想用它的颜色,就可以根据蒙版生成词云图的颜色,之后对 WordCloud 对象进行 recolor ,不清楚为什么最后的效果并不理想,我再研究一下,如果解决了会放到评论区。
bg_img = plt.imread('./image/男生.jpeg')
wc = WordCloud(
max_font_size=50,
font_path='simkai.ttf',
colormap='Blues',
mask=bg_img
)
wc.generate(result)
image_color = ImageColorGenerator(bg_img) # 生成颜色
wc_color = wc.recolor(color_func=image_color) # 重新上色
wc_color.to_file("./image/wordcloud_3.png") # 保存云图