Python 绘制词云图:更改或自定义背景颜色,图片轮廓,图片大小等,根据词频生成(放入自写库,一行代码快速实现复杂绘图)

在这里插入图片描述

更多商业数据分析案例(原理,完整代码,数据集)、统计学、SQL、网络爬虫详见公众号 " 数据分析与商业实践 "

引言

  词云的作用已不必多说,也有许多不同版本生成词云的方法,但有时候调整图片细节能把人给调得脚趾头不自觉的瞉起。所以为何不直接将其封装进一个函数中,将各种绘制参数都事先准备好,尽可能一了百了呢?说干就干,看看下面的效果图就知道了。PS:Jupyter notebook 实现



使用效果

  使用前的注意事项:被读取的文本文件和希望自定义的图片轮廓需要与你的 py 文件放在同一个文件夹。

另外,图片还得经过特殊处理一下,可以请身边ps老鸟帮忙或自己稍微学一下又或者借助图片处理软件

  • 背景雪白
  • 如果希望是人物轮廓型,既能够看得出镂空的边的,还得更细致的处理一下

笔者以下面这张图作为词云的轮廓,背景够白了吧,但中间没有镂空,一起期待一下效果吧!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是不镂空的结果,只有一坨东西,不过如果图形是地图之类的无需镂空也能很好看出你在画什么的那就无妨。



代码呈现

  代码中的各种坑笔者都已经踩过了,所以注释也还算清晰明了,望对各位有帮助。也希望各位的数据可视化能够画出姿态,画出辉煌。

def wordcloud_create(content, most_common_num=None,
                     figsize=(12,10), pac_mask=None, 
                     background_color='white'):
    """ 
    函数功能:根据次词频生成词云,可自定义词云的背景颜色与轮廓
    content: 文本内容
    most_common_num: 最常出现的字的个数
    figsize: 默认大小为 12,10,彰显大气
    mask: 遮罩层,也称为词云图的轮廓,默认没有,需要自己添加
    background_color: 词云图背景颜色,默认白色
    """
    # ------------------ 引入必要库 --------------
    import jieba
    from PIL import Image
    from wordcloud import WordCloud  # 用来生成词云的库
    import matplotlib.pyplot as plt   # Python画图库
    from imageio import imread    
    # Python读取各类图像的库,imageio 好些,以前的一些其他的用不了了
    from collections import Counter   # Counter:计算器,计数员,用来统计词频
    # ------------------ 拼接文本 -------------------
    mylist = list(content)  # 用list()函数将导入的文件变成列表模式
    new_list = [" ".join(jieba.cut(sentence)) for sentence in mylist]
    # 逐一从my_list列表中抽出句子来给jieba这家伙截词,截了以后用join,以空格作为间隔连接起来
    # 不用逗号连接起来的原因,避免不必要的干扰
    con_words = ' '.join(new_list) # 这一行也很关键,消除换行符的影响
    frequencies = Counter(con_words).most_common(most_common_num)
    frequencies = dict(frequencies)
    # -----------设置词云轮廓并生成词云 --------------------
    if pac_mask == None:
        wc = WordCloud(font_path='simhei.ttf',  # simhei.ttf:黑体
                        background_color=background_color,
                       max_words=2000
                      ).fit_words(frequencies)
        # 如:允许显示出来的最大词数,最大最大频率词的大小,等等
        plt.figure(figsize=figsize)
        plt.imshow(wc)
        plt.axis('off')  
        # axis: 轴,off掉,不显示坐标轴,否则会显示出以图片频率为xy轴的坐标轴
        plt.show()
    else:
        pac_mask = imread(pac_mask=pac_mask)
        wc = WordCloud(font_path='simhei.ttf',  # simhei.ttf:黑体
                        background_color=background_color, 
                       max_words=2000,
                       mask=pac_mask).fit_words(frequencies)

        # 如:允许显示出来的最大词数,最大最大频率词的大小,等等
        plt.figure(figsize=figsize)
        plt.imshow(wc)
        plt.axis('off')  
        # axis: 轴,off掉,不显示坐标轴,否则会显示出以图片频率为xy轴的坐标轴

延伸阅读



后记

  数据分析,商业实践,数据可视化,网络爬虫,统计学,Excel,Word, 社会心理学,认知心理学,行为科学,民族意志学 各种专栏后续疯狂补充

  欢迎评论与私信交流!

### 创建带有自定义形状的词云图 为了创建带自定义形状的词云图,可以利用 `wordcloud` 中的功能来实现这一目标。具体来说,可以通过读取图片文件作为掩码图像,从而让生成呈现出该图片轮廓。 #### 准备工作 安装必要的: ```bash pip install wordcloud matplotlib numpy pillow ``` #### 导入所需模块并加载文本数据 首先导入所需的 Python 模块,并准备要可视化的文本字符串: ```python from wordcloud import WordCloud, ImageColorGenerator import matplotlib.pyplot as plt import numpy as np from PIL import Image import os ``` 接着定义一段用于测试的文字内容者从外部文件中读取文字材料。 #### 加载掩码图像 选择一张黑白两色的 PNG 图片作为模板,白色部分代表语填充区域,黑色则表示背景。使用 Pillow 来处理图像: ```python mask = np.array(Image.open(os.path.join("path_to_image", "tiktok_logo.png"))) ``` 此处 `"path_to_image"` 需替换为实际路径名;而 `"tiktok_logo.png"` 则应指向所选作模板的具体图形文件[^2]。 #### 构建WordCloud对象与参数配置 初始化 `WordCloud()` 类实例时传入上述掩码数组以及其他个性化选项,比如字体样式、最大字号等: ```python wc = WordCloud(background_color="white", max_words=2000, mask=mask, contour_width=3, contour_color='steelblue') ``` 此段代码设置了背景颜色为纯白(`background_color="white"`),允许最多显示两千个单 (`max_words=2000`) ,并且指定了基于之前加载的掩码构建。还额外添加了边缘描边效果(`contour_width`, `contour_color`)使最终效果图更加美观。 #### 生成 调用 `generate()` 方法传递待分析的文本串给刚刚建立好的 `WordCloud` 对象以完成词频统计及布局安排过程: ```python text = 'Here I go again on my own \ Going down the only road I\'ve ever known\ Like a drifter I was born to walk alone' # 者 text可以从其他地方获取 wc.generate(text) ``` 这段伪代码模拟了一个简单的英文歌片段作为输入源。 #### 显示结果 最后一步就是渲染绘图并将结果显示出来: ```python plt.figure(figsize=(10, 6)) plt.imshow(wc, interpolation='bilinear') plt.axis('off') # 关闭坐标轴 plt.show() ``` 以上即完成了整个流程介绍以及相应操作指南。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值