在做词云图的时候,因为需要指定形状的词云图,所以想到用ppt绘制形状,将透明背景的形状另存为png图片保存到本地。
保存的图片如下:
在这里插入图片描述

再调用wordcloud包绘制词云图,设置词云背景为前面保存的png图片。

import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
from imageio import imread
# from scipy.misc import imread

# 导入文本数据并进行简单的文本处理
# 去掉换行符和空格
text = open("text.txt", encoding='utf-8').read()
text = text.replace('\n', "").replace("\u3000", "")

# 分词,返回结果为词的列表
text_cut = jieba.lcut(text)
# 将分好的词用某个符号分割开连成字符串
text_cut = ' '.join(text_cut)

# 导入停词
# 用于去掉文本中类似于'啊'、'你','我'之类的词
stop_words = open("stopwords.txt", encoding="utf8").read().split("\n")

background = Image.open("cloud.png").convert('RGB')
# im=imread('cloud_new.png',pilmode="CMYK")
graph = np.array(background)
# background = imread()
# 使用WordCloud生成词云
word_cloud = WordCloud(scale=4,  # 图片分辨率
            font_path="msyh.ttc",  # 设置词云字体
            # min_font_size=30,  # int (default=4) 显示的最小的字体大小
            # max_font_size=None,  # int (default=None) 显示的最大的字体大小
            # font_step=4,  # 字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差
            # max_words=200,  # int (default=200) #要显示的词的最大个数
            relative_scaling=0.1,  # float (default=.5) #词频和字体大小的关联性
            background_color="white",  # 词云图的背景颜色
            mask=graph,  # 指定词云的形状
            stopwords=set(stop_words)
            )  # 去掉的停词
word_cloud.generate(text_cut)

# 运用matplotlib展现结果
plt.subplots(figsize=(12, 8))
plt.imshow(word_cloud)
plt.axis("off")
# plt.savefig("wordcloud.jpg")
plt.show()

结果如下,不知道为什么,生成的图云还是矩形形状。
在这里插入图片描述
了解到ppt绘制的形状图用python读取后原本的透明背景变成了白色背景。🆗 那就用python把白色背景变透明吧。

把png的白色背景变透明

import PIL.Image as Image
# 如果当前位深是32的话,可以不用写转RGBA模式的这一句,但是写上也没啥问题
# 从RGB(24位)模式转成RGBA(32位)模式
img = Image.open('cloud.png').convert('RGBA')
W, L = img.size
white_pixel = (0, 0, 0, 0)  # 白色
for h in range(W):
  for i in range(L):
    if img.getpixel((h, i)) == white_pixel:
      img.putpixel((h, i), (255, 255, 255, 0))   # 设置透明
img.save('cloud_new.png')  # 自己设置保存地址

修改后的词云背景图片cloud_new.png如下:
在这里插入图片描述

用修改后的词云背景cloud_new.png重新跑一遍词云代码,生成的词云结果如下:

在这里插入图片描述

参考:https://cloud.tencent.com/developer/article/1847968
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐