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

news2025/1/21 1:02:29

目录

目标:用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 可能又是jupyternotebook这个IDE的特殊性导致的?

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

2.5 用wordcloud() 函数生成图片

2.6 核心

3 基础代码:WordCloud.generate() 报错的问题

解决一个奇怪的报错:TypeError: WordCloud.generate() missing 1 required positional argument: 'text'

3.1 基础 wordcloud代码,报错

3.1.1 代码

3.1.2 网上查到的方法不对

3.1.3 解决办法

3.1.4 出错原因

4 wordcloud() 语法详细


目标:用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,STOPWORDS
import PIL.Image as image  #默认矩形,有想要的形状可以加入图片

#居然不需要 import  matplotlib ?

2.3.2 可能又是jupyternotebook这个IDE的特殊性导致的?

  • 居然不需要 import  matplotlib
  • 后面使用 plt.show() 也没有出错

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

  • 不用写 plt.show()  也能显示matplotlib.pyplot 下的figure内的图形
  • 不支持弱引用

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

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

2.5 用wordcloud() 函数生成图片

  • 先进行图片解码
  • 然后再显示图片

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")#去除坐标轴

  • 需要用图片解码

    pic_path = r'C:\Users\Administrator\Desktop\tp2.jpg'#注意路径
    img_mask = np.array(image.open(pic_path))#图片解码 

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

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

2.6 核心

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

调用之前的函数


wordList = get_wordList()
get_wordClound(wordList)

3 基础代码:WordCloud.generate() 报错的问题

解决一个奇怪的报错:TypeError: WordCloud.generate() missing 1 required positional argument: 'text'

3.1 基础 wordcloud代码,报错

3.1.1 代码

import matplotlib.pyplot as plt
import wordcloud

text="你好,hello,hi"
wordcloud=wordcloud.WordCloud.generate(text)

3.1.2 网上查到的方法不对

这个错误通常出现在使用了一个过期的Pillow库版本或者安装错误的Pillow库版本上。建议检查你的Pillow库版本是否正确,并更新至最新版本。可以通过以下命令更新Pillow库:pip install --upgrade Pillow(可能出现权限不允许,使用管理员身份运行cmd窗口)


pip install --upgrade Pillow

在执行generate方法时报错ValueError: Only supported for TrueType fonts
解决方法:
先确认一下WordCloud的font_path参数指向的font文件路径有无问题,如果没问题大概率就是pip没有更新的问题了

generate
     实例:
>>> text3.generate()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: generate() missing 1 required positional argument: 'words'
>>>
产生一些与text3风格类似的随机文本。但在本机上却出错,原因是我使用的是nltk3.3和Python3.6,该版本下generate函数被注释了,所以无法使用。
而《python自然语言处理时》书中用的是NLTK2.0版本。

3.1.3 解决办法

  • wordcloud=wordcloud.WordCloud.generate(text)
  • 修改为
  • wordcloud=wordcloud.WordCloud().generate(text)
  • 马上就不报错了

下面是修正的代码

import matplotlib.pyplot as plt
import wordcloud

text="你好,hello,hi"
wordcloud=wordcloud.WordCloud().generate(text)

下面是修正的代码,加上显示图形,

import matplotlib.pyplot as plt
import wordcloud

text="你好,hello,hi"
wordcloud=wordcloud.WordCloud().generate(text)

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

效果如下

3.1.4 出错原因

  • wordcloud=wordcloud.WordCloud.generate(text)
  • wordcloud=wordcloud.WordCloud().generate(text)
  • 必须是函数WordCloud()的返回对象的的方法.generate(text)
  • 而不是对象名为WordCloud这样的某个对象的方法.generate(text)

# 创建一个WordCloud对象 wordcloud = WordCloud()

还要注意大小写wordcloud.WordCloud()

下面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()

4 wordcloud() 语法详细

4.1 几级对象辨析

wordcloud.WordCloud().generate(text)

4.2 函数基础语法

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

wordcloud.WordCloud

WordCloud的参数:
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) 接受一个字符串
 

# 打开文本
text = open(base_dir + 'constitution.txt').read()


# 生成对象
wc  = WordCloud().generate(text)

4.3 如何显示
 

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

# 显示词云图
wordcloud.to_image().show()

# 显示
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()


 

4.4 保存为图片

wc.to_file("默认样式.png")

输出

  • 提供了四个输出函数:
    1. to_array(self):numpy数组格式
    2. to_file(self, filename)
    3. to_html(self):没有实现
    4. 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
 

5 设置图片效果

使用透明背景   蒙板

透明背景: 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)
 

使用蒙版中的颜色

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

自定义颜色

# 颜色函数
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)
 

使用权重

# 提取关键词和权重
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)
 

6 jieba 和分词

# 分词
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 WordCloud
 
text = 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")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1339680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

StackOverflowError的JVM处理方式

背景&#xff1a; 事情来源于生产的一个异常日志 Caused by: java.lang.StackOverflowError: null at java.util.stream.Collectors.lambda$groupingBy$45(Collectors.java:908) at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) at java.util.ArrayL…

基于飞浆OCR的文本框box及坐标中心点检测JSON格式保存文本

OCR的文本框box及JSON数据保存 需求说明 一、借助飞浆框出OCR识别的文本框 二、以圆圈形式标出每个框的中心点位置 三、以JSON及文本格式保存OCR识别的文本 四、以文本格式保存必要的文本信息 解决方法 一、文本的坐标来自飞浆的COR识别 二、借助paddleocr的draw_ocr画出…

【数据库系统概论】第4章-数据库安全性

复习用&#xff0c;别看了 文章目录 4.1 计算机安全性概述4.2 数据库安全性控制4.2.1 用户标识和鉴定4.2.2 存取控制4.2.3 自主存取控制方法4.2.4 数据库角色4.2.5 强制存取控制 4.3 视图机制4.4 审计4.5 数据加密4.6 其他安全性保护 4.1 计算机安全性概述 不安全因素 4.2 …

项目管理计划(word版21页)

本计划的主要目的是通过本方案明确本项目的项目管理体系。方案的主要内容包括&#xff1a;明确项目的目标及工作范围&#xff0c;明确项目的组织结构和人员分工&#xff0c;确立项目的沟通环境&#xff0c;确立项目进度管理方法&#xff0c;明确项目跟踪和监控方式&#xff0c;…

代理模式:中间者的故事

代理模式&#xff1a;中间者的故事 介绍需求分析代理模式代码实现代理模式整理和用途第一种用途第二种用途第三种用途第四种用途 总结 介绍 本文引用《大话设计模式》第七章节的内容进行学习分析&#xff0c;仅供学习使用 需求&#xff1a;小明拜托自己好朋友小王给他朋友小美…

同化的题解

时间限制: 1000ms 空间限制: 524288kB 题目描述 古人云&#xff1a;“近朱者赤近墨者黑”。这句话是很有道理的。这不鱼大大和一群苦命打工仔被安排进厂拧螺丝了。 进厂第一天&#xff0c;每个人拧螺丝的动力k都是不同且十分高涨的。但是当大家坐在一起后会聊天偷懒&#xf…

python3处理docx并flask显示

前言&#xff1a; 最近有需求处理docx文件&#xff0c;并讲内容显示到页面&#xff0c;对world进行在线的阅读&#xff0c;这样我这里就使用flaskDocument对docx文件进行处理并显示&#xff0c;下面直接上代码&#xff1a; Document处理&#xff1a; 首先下载Document的库文…

【论文解读】Learning based fast H.264 to H.265 transcoding

时间&#xff1a; 2015 年 级别&#xff1a; APSIPA 机构&#xff1a; 上海电力大学 摘要 新提出的视频编码标准HEVC (High Efficiency video coding)以其比H.264/AVC更好的编码效率&#xff0c;被工业界和学术界广泛接受和采用。在HEVC实现了约40%的编码效率提升的同时&…

源码补丁神器—patch-package

一、背景 vue项目中使用 vue-pdf 第三方插件预览pdf&#xff0c;书写业务代码完美运行&#xff0c;pdf文件内容正常预览无问题。后期需求有变&#xff0c;业务需求增加电子签章功能。这个时候pdf文件的内容可以显示出来&#xff0c;但是公司的电子签章无法显示。这令人沮丧&am…

B/S架构云端SaaS服务的医院云HIS系统源码,自主研发,支持电子病历4级

医院云HIS系统源码&#xff0c;自主研发&#xff0c;自主版权&#xff0c;电子病历病历4级 系统概述&#xff1a; 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统…

科研学习|论文解读——融合类目偏好和数据场聚类的协同过滤推荐算法研究

论文链接&#xff08;中国知网&#xff09;&#xff1a; 融合类目偏好和数据场聚类的协同过滤推荐算法研究 - 中国知网 (cnki.net) 摘要&#xff1a;[目的/意义]基于近邻用户的协同过滤推荐作为推荐系统应用最广泛的算法之一&#xff0c;受数据稀疏和计算可扩展问题影响&#x…

大数据应用开发2-Scala语言各个环境配置

一、首先安装JDK1.8版本(简单过一下) 1.下载与安装 下载Java1.8 地址&#xff1a;Java Downloads | Oracle 中国 点击跳转&#xff08;下载需要登录甲骨文账号&#xff09; 下载完成运行 修改安装目录&#xff08;两个都要改&#xff09; 复制第一次修改的安装目录 2.配置环…

构建安全防线:SDLC中的供应链攻击防范最佳实践与Log360解决方案

在过去的12个月里&#xff0c;有10家公司发现了软件供应链风险。供应链中依赖关系的增加扩大了对手的攻击面。这也导致威胁行为者将注意力从仅影响最终用户的下游链转移到上游链&#xff0c;影响供应商、客户和最终用户。因此&#xff0c;让我们立即讨论如何使你的SOC团队在产品…

netty源码:(40)ReplayingDecoder

ReplayingDecoder是ByteToMessageDecoder的子类&#xff0c;我们继承这个类时&#xff0c;也要实现decode方法&#xff0c;示例如下&#xff1a; package cn.edu.tju;import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handle…

Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录

Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录 之前发布过Window方式,这次结合以上主题,完善下Linux相关登入方式过程,纯属做个记录,有需要的朋友可以做个学习参考。 一、Windows环境提示“‘mysql’ 不是内部或外部命令,也不是可运行的程序或批…

超声波清洗机到底实不实用?哪些超声波清洗机值得入手

在日常生活中&#xff0c;我们常常会遇到各种难以清洗的物品&#xff0c;如眼镜、首饰、牙套等。传统的手工清洗方法不仅费时费力&#xff0c;而且难以彻底清除污渍。这时&#xff0c;超声波清洗机便进入了人们的视野。它利用超声波的振动来清除物品表面的污渍和杂质&#xff0…

观察者模式概述

观察者模式,它用于建立一种对象与对象之间的依赖关系&#xff0c; 一个对象发生改变将自动通知其他对象&#xff0c; 其他对象将相应做出反应。在观察者模式种&#xff0c;发生改变的对象称为观察目标&#xff0c; 而被通知的对象称为观察者&#xff0c;一个观察目标可以对应多…

【Spring实战】09 MyBatis Generator

文章目录 1. 依赖2. 配置文件3. 生成代码4. 详细介绍 generatorConfig.xml5. 代码详细总结 Spring MyBatis Generator 是 MyBatis 官方提供的一个强大的工具&#xff0c;它能够基于数据库表结构自动生成 MyBatis 持久层的代码&#xff0c;包括实体类、Mapper 接口和 XML 映射文…

C# 操作非持久化内存映射文件

目录 写在前面 代码实现 进程A 进程B 进程C 调用示例 总结 写在前面 多个进程之间&#xff0c;通过操作未映射到磁盘上现有文件的内存映射文件&#xff0c;可以实现数据共享和类似进程间通讯的功能。以下示例展示了使用三个独立进程&#xff0c;先各自将布尔值写入内存…

Vue axios Post请求 403 解决之道

前言&#xff1a; 刚开始请求的时候报 CORS 错误&#xff0c;通过前端项目配置后算是解决了&#xff0c;然后&#xff0c;又开始了新的报错 403 ERR_BAD_REQUEST。但是 GET 请求是正常的。 后端的 Controller 接口代码如下&#xff1a; PostMapping(value "/login2&qu…