【python 的各种模块】(8) 在python使用matplotlib和wordcloud库来画wordcloud词云图

2024-03-13 23:59

本文主要是介绍【python 的各种模块】(8) 在python使用matplotlib和wordcloud库来画wordcloud词云图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

目标:用python画出,网上流行的wordcloud词云图

1 准备工作

1.1环境准备

1.1.1安装步骤

1.2 资源准备

1.2.1  文本文件内容如下

1.2.2 图片资源

2 代码测试

2.1 第一版代码和效果

2.1.1 代码和效果

2.1.2 一般plt里解决中文乱码问题

2.1.3 wordcloud的中文显示方框解决办法

2.2 修改后的代码

2.3 上述代码解析

2.3.1 导入模块

2.3.2  读取txt文件的内容,存储在变量wordlist里

2.3.3  用mask属性进行图片解码,然后利用解码的图形形式

2.3.4 输出显示

2.3.5 核心函数 WordCloud()

3 wordcloud() 语法详细

3.1 多级对象辨析

3.2  函数基础语法

3.3  函数基础语法相关参数解析

3.3.1 WordCloud的参数:

3.3.2 测试代码

4 词云图片的显示和输出

4.1 几种显示方式

4.1.1 用 plt.imshow(wordcloud)显示词云

4.1.2 用wordcloud.to_image().show() 来显示词云,并不保存图片!

4.2 保存为图片

4.2.1 其他输出函数和依赖的包/模块

4.2.2 使用 wordcloud.to_file(path) 保存词云

4.2.3  使用wordcloud.to_image().save(path)

5 设置图片效果

5.1 mask 蒙版相关

5.1.1 使用透明背景   蒙板

5.1.2 使用蒙版中的颜色

5.1.3 自定义颜色

6 jieba 和分词


目标:用python画出,网上流行的wordcloud词云图

1 准备工作

1.1环境准备

  • 确保已经安装了 wordcloud 模块
  • 如果你运行代码时,加上了这句from wordcloud import WordCloud,STOPWORDS,
  • 报错: 找不到wordcloud 模块 ,那么你就需要先安装wordcloud 模块

1.1.1安装步骤

以我的环境 anaconda为例子

  • step1: 运行anaconda prompt 命令行的IDE
  • step2: 可以先输入 conda list 看看都安装了什么,也可以不看,^ ^
  • step3: 输入 pip show wordcloud ,如果显示找不到就是没有安装
  • step4: 输入 pip install wordcloud 安装完成即可
  • step5: 输入 pip show wordcloud 检查下是否安装成功,看看版本信息,也可以部看,^ ^

1.2 资源准备

1.2.1  文本文件内容如下

随便找点词语,有重复的,不重复的即可。

开心、喜悦、狂喜、尽情、快乐、愉悦、畅快、欣喜、幸福、得意、痛快、满足、欢乐、快活
快乐,舒畅,舒心,欢畅,夷悦,欣忭,怡悦,得意,愿意,欢跃,夷愉,欢快,喜悦,快活,愉快,欢乐,忻悦,欣喜,欢喜,痛快,雀跃,乐意
眉开眼笑 眉飞色舞 喜上眉梢 喜在眉宇 喜眉笑目 捧腹大笑 手舞足蹈 前仰后合
开怀大笑 欢蹦乱跳 笑容可掬 喜笑顡开 笑逐颜开 相视而笑 谈笑风生 兴高采烈
喜从天降 高高兴兴 开开心心 嘻嘻哈哈 满怀喜悦 满心欢喜 喜出望外 大喜过望
甜美、微笑、兴奋,陶醉,高兴,自豪、欣慰,满意、幸运、嬉笑,满意、幸运、嬉笑,狂笑,荣幸,痛快、满足、欢乐、快活,畅快、欣喜、幸福、得意,开心、喜悦、狂喜、尽情、快乐、愉悦、畅快、欣喜、幸福、逸乐、尽情、舒畅、愉快、喜哈、愉快

1.2.2 图片资源

  •  图片要注意,wordcloud是把词语生成在图片中,之前有图像的地方,而不是空白的地方
  • 因此不要找那种 空白区域特别大的,否则最后效果可能会让你惊讶

2 代码测试

2.1 第一版代码和效果

2.1.1 代码和效果

  • 这效果不对啊,这么多方框是什么情况?
from wordcloud import WordCloud,STOPWORDS
import PIL.Image as image#默认矩形,有想要的形状可以加入图片#plt.rcParams['font.family']='LiSu'# 正常显示中文
#plt.rcParams['axes.unicode_minus']=False# 正常显示负号def get_wordList():f = open(r'C:\Users\Administrator\Desktop\t2.txt')wordList = f.read()return wordList
def get_wordClound(mylist):pic_path = r'C:\Users\Administrator\Desktop\tp2.jpg'#注意路径img_mask = np.array(image.open(pic_path))#图片解码 wordcloud = WordCloud(background_color = "white",mask = img_mask).generate(mylist)#font_path ="C:/Windows/Fonts/msyh.ttc",#mask = img_mask掩码 generate(mylist)获取数据plt.imshow(wordcloud)plt.axis("off")#去除坐标轴
wordList = get_wordList()
get_wordClound(wordList)plt.title("wordcloud词云实验")
plt.show()

2.1.2 一般plt里解决中文乱码问题

matplotlib 对中文的支持有问题

一般画图时,遇到图片相关中文显示问题,一般在代码前面加这2句

plt.rcParams['font.family']='LiSu'# 正常显示中文
plt.rcParams['axes.unicode_minus']=False# 正常显示负号

2.1.3 wordcloud的中文显示方框解决办法

  • wordcloud = WordCloud(background_color = "white",mask = img_mask).generate(mylist)
  • 函数WordCloud()加上 font_path ="C:/Windows/Fonts/msyh.ttc",
  • wordcloud = WordCloud(font_path ="C:/Windows/Fonts/msyh.ttc",background_color = "white",mask = img_mask).generate(mylist)

2.2 修改后的代码

from wordcloud import WordCloud,STOPWORDS
import PIL.Image as image#默认矩形,有想要的形状可以加入图片plt.rcParams['font.family']='LiSu'# 正常显示中文
plt.rcParams['axes.unicode_minus']=False# 正常显示负号def get_wordList():f = open(r'C:\Users\Administrator\Desktop\t2.txt')wordList = f.read()return wordList
def get_wordClound(mylist):pic_path = r'C:\Users\Administrator\Desktop\tp2.jpg'#注意路径img_mask = np.array(image.open(pic_path))#图片解码 wordcloud = WordCloud(font_path ="C:/Windows/Fonts/msyh.ttc",background_color = "white",mask = img_mask).generate(mylist)#mask = img_mask掩码 generate(mylist)获取数据plt.imshow(wordcloud)plt.axis("off")#去除坐标轴
wordList = get_wordList()
get_wordClound(wordList)plt.title("wordcloud词云实验")
plt.show()

2.3 上述代码解析

2.3.1 导入模块

  • from wordcloud import WordCloud
  • 如果需要作图一般来说,需要导入import  matplotlib ,但是在jupyternotebook不import  matplotlib,居然也可以引用后面使用 plt.show() 也没有出错

居然不需要 import  matplotlib,怀疑又是jupyternotebook这个IDE的特殊性导致的?

jupyternotebook我现在知道的例外的特点:

  • 不用写 plt.show()  也能显示matplotlib.pyplot 下的figure内的图形
  • 不支持弱引用
  • (猜测的) import  matplotlib 也可以用plt的内容作图?

2.3.2  读取txt文件的内容,存储在变量wordlist里

def get_wordList():
    f = open(r'C:\Users\Administrator\Desktop\t2.txt')
    wordList = f.read()
    return wordList

2.3.3  用mask属性进行图片解码,然后利用解码的图形形式

  • 先进行图片解码,也就是通过wordcloud(mask="") 属性把一张图片转义为一个矩阵。(应该是一个二进制的数值矩阵)
  • 然后再利用这个图片解码的矩阵作为 范围就显示图片

def get_wordClound(mylist):
    pic_path = r'C:\Users\Administrator\Desktop\tp2.jpg'  
    img_mask = np.array(image.open(pic_path))         

  
    wordcloud = WordCloud(font_path ="C:/Windows/Fonts/msyh.ttc",background_color = "white",mask = img_mask).generate(mylist)
    #mask = img_mask掩码 generate(mylist)获取数据


    plt.imshow(wordcloud)
    plt.axis("off")#去除坐标轴

2.3.4 输出显示

  • 用 plt.imshow() 显示图片
  • 隐藏坐标轴

    plt.imshow(wordcloud)
    plt.axis("off")#去除坐标轴

2.3.5 核心函数 WordCloud()

后面详细说明

wordcloud = WordCloud(font_path ="C:/Windows/Fonts/msyh.ttc",background_color ="white",mask = img_mask).generate(mylist)

3 wordcloud() 语法详细

  • wordcloud = WordCloud().generate()

3.1 多级对象和方法辨析

  • wordcloud.WordCloud().generate(text)
  • #导入模块                         import wordcloud   
  • #导入模块的下级              form wordcloud import WordCloud
  • #生成WordCloud() 对象    wordcloud.WordCloud()   #生成一个wordcloud对象
  • #错误写法,wordcloud.WordCloud   并不是下级对象/属性

3.2  函数基础语法

  • wordcloud.WordCloud()

help(wordcloud.WordCloud()) 内容太多太长了,这里就不贴了 

  • 在python里使用 help() 函数获得官方帮助
  • help(wordcloud.WordCloud())
import wordcloudhelp(wordcloud.WordCloud())

3.3  函数基础语法相关参数解析

3.3.1 WordCloud的参数,第1部分:

  • font_path:可用于指定字体路径
  • width:词云的宽度,默认为 400;
  • height:词云的⾼度,默认为 200;
  • mask:蒙版,可⽤于定制词云的形状;
  • min_font_size:最⼩字号,默认为 4;
  • max_font_size:最⼤字号,默认为词云的⾼度;
  • max_words:词的最⼤数量,默认为 200;
  • stopwords:将被忽略的停⽤词,若不指定则使⽤默认停⽤词词库;
  • background_color:背景颜⾊,默认为 black;
  • mode:默认为RGB模式,如果为RGBA模式且background_color设 为 None,则背景将透明。
  • generate(str) 接受一个字符串
  • font_path ="C:/Windows/Fonts/msyh.ttc",显示字体,中文一定要设置字体
  • repeat: 可以让text里的词语重复使用,适合文件里文本较少的情况
  • max_words: 显示的最多的词语数,
  • colormap      #="winter", "summer" #配色方案

3.3.2 重点说明:font_path ="C:/Windows/Fonts/msyh.ttc",显示字体,中文一定要设置字体

  • windows系统的电脑的,字体的存放位置。
  • 需要指定一个中文字体即可

3.3.3 WordCloud的参数测试部分

  • 比如=改变colormap="winter"  或者"spring" 等可以修改颜色
import matplotlib.pyplot as plt
import wordcloudtext="你好,hello,hello,hello,hi"
wordcloud=wordcloud.WordCloud(font_path ="C:/Windows/Fonts/msyh.ttc",\width=int(100/0.618),\height=100,\mode='RGBA',\background_color=None,\min_font_size=1,\max_font_size=20,\repeat=True,max_words=20,colormap="spring",).generate(text)plt.imshow(wordcloud)
plt.axis("off")
plt.show()


 

4 词云图片的显示和输出

4.1 几种显示方式

4.1.1 用 plt.imshow(wordcloud)显示词云

import matplotlib.pyplot as plt
import wordcloudtext="你好,hello,hi"
wordcloud=wordcloud.WordCloud().generate(text)plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

# 显示

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")

plt.show()

4.1.2 用wordcloud.to_image().show() 来显示词云,并不保存图片!

  • 可以用下面2种写法,但是有细微的差别
  • wordcloud.to_image().show()   # 会直接在 jupyter里直接显示
  • wordcloud.to_image()              # 会弹出一个图片,你可以手动保存,但不会主动保存
import matplotlib.pyplot as plt
import wordcloudtext="你好,hello,hi"
wordcloud=wordcloud.WordCloud().generate(text)#这个不行  #plt.show(wordcloud)
wordcloud.to_image().show()
#plt.axis("off")

import matplotlib.pyplot as plt
import wordcloudtext="你好,hello,hi"
wordcloud=wordcloud.WordCloud().generate(text)#这个不行  #plt.show(wordcloud)
wordcloud.to_image()
#plt.axis("off")

4.2 保存为图片

4.2.1 其他输出函数和依赖的包/模块

  • 提供了四个输出函数:
  • to_array(self):numpy数组格式
  • to_file(self, filename)
  • to_html(self):没有实现
  • to_image(self):PIL图像

依赖的包

from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
import matplotlib.pyplot as plt
import jieba
import jieba.analyse
from PIL import Image
import random
import numpy as np
 

4.2.2 使用 wordcloud.to_file(path) 保存词云

  • wordcloud.to_file(path)
import matplotlib.pyplot as plt
import wordcloudtext="你好,hello,hi"
wordcloud=wordcloud.WordCloud().generate(text)#这个不行  #plt.show(wordcloud)
wordcloud.to_file(r"C:\Users\Administrator\Desktop\1.png")
#plt.axis("off")

4.2.3  使用wordcloud.to_image().save(path)

  • wordcloud.to_image().save(path)
import matplotlib.pyplot as plt
import wordcloudtext="你好,hello,hi"
wordcloud=wordcloud.WordCloud().generate(text)#这个不行  #plt.show(wordcloud)
wordcloud.to_image().save(r"C:\Users\Administrator\Desktop\2.png")
#plt.axis("off")

5 设置图片效果(下面没修改完成。。。)

mask 获得蒙版效果

蒙版==字体的显示区域

设置蒙版的边框

counter_width参数:我们注意到之前生成的图虽然有了边框,但只有一个大致的形状,想要把边框用直线画出来,就需要设置这个参数我们设置contour_width=3,得到的结果为:

11.mode参数:mode参数默认为RGB通道,如果我们想设置词云背景为透明,需要将mode设置为RGBA,background_color设置为None,生成结果为背景透明图片:

5.1 mask 蒙版相关

使用图片的配色??

from wordcloud import ImageColorGenerator from PIL import Image import numpy as np colors=np.array(Image.open("780.jpg")) color_map=ImageColorGenerator(colors)

我们通过将图片转化为array数组来获取它的RGB三通道值,再用wordcloud自带的ImageColorGenerator函数将其转为配色,注意这时候就不能再用colormap参数了,这时候得使用color_func参数:

from wordcloud import WordCloud
from wordcloud import  ImageColorGenerator
from PIL import Image
import numpy as np

colors=np.array(Image.open("780.jpg"))

color_map=ImageColorGenerator(colors)

wd=WordCloud(font_path="C:\\Windows\\Fonts\\simsun.ttc",background_color="white",repeat=True,color_func=color_map)

wd.generate("1 2 33 333  31")

wd.to_file("1.png")
 

5.1.1 使用透明背景   蒙板

  • 透明背景: mode=‘RGBA’, background_color=None
  • mask = np.array(Image.open("black_mask.png"))
  • wc = WordCloud(font_path='Hiragino.ttf', mode='RGBA', background_color=None, mask=mask, width=600, height=400)
     

5.1.2 使用蒙版中的颜色

  • image_colors = ImageColorGenerator(mask)
  • wc.recolor(color_func=image_colors)
     

5.1.3 自定义颜色

# 颜色函数
def random_color(word, font_size, position, orientation, font_path, random_state):
    s = 'hsl(0, %d%%, %d%%)' % (random.randint(60, 80), random.randint(60, 80))
    return s
...

wc = WordCloud(color_func=random_color, font_path='Hiragino.ttf',mode='RGBA', background_color=None, mask=mask)
 


 

下面2段只要1个,要改

from wordcloud import WordCloud# 创建一个WordCloud对象
wordcloud = WordCloud()# 定义文本
text = "This is a sample text for word cloud generation."# 使用WordCloud.generate()函数生成词云图
wordcloud.generate(text)# 显示词云图
wordcloud.to_image().show()
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 创建一个WordCloud对象
wordcloud = WordCloud()# 生成词云图
text = "Python wordcloud词云,在一段文本中提取关键词进行扁平化的展示,更能吸引目标客户的眼球。"
wordcloud.generate(text)# 显示词云图
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()

6 jieba 和分词

6.1 中午分词模块,jieba,解霸?结巴?

6.2 获得文本内容

text = open("D:/++/宏观经济和资产配置.txt", encoding="utf-8").read()  # 标明文本路径,打开

text = ' '.join(jieba.cut(text))

使用权重

# 提取关键词和权重
freq = jieba.analyse.extract_tags(text_new, topK=200, withWeight=True)   # 列表
freq = {i[0]: i[1] for i in freq}    # 字典

mask = np.array(Image.open(f"{base_dir}color_mask.png"))
wc = WordCloud(font_path='Hiragino.ttf',mode='RGBA', background_color=None, mask=mask)
res = wc.generate_from_frequencies(freq)
 

freq = nltk.FreqDist(word_text)
# wc.fit_words(freq)    # 然后再generate
wc.generate_from_frequencies(freq)

# 分词
text_new = " ".join(jieba.cut(text))
wc = WordCloud('Hiragino.ttf') # 不加字体会中文乱码
 

text = ' '.join(jieba.cut(text))

import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloudtext = open("D:/++/宏观经济和资产配置.txt", encoding="utf-8").read()  # 标明文本路径,打开# 生成对象
wc = WordCloud(font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc",width=500, height=400, mode="RGBA", background_color=None).generate(text)
# 显示词云图
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()#保存文件
wc.to_file("C:/Users/xiao/Desktop/ciyun1.png")

这篇关于【python 的各种模块】(8) 在python使用matplotlib和wordcloud库来画wordcloud词云图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/806627

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中