当前位置: 首页 > news >正文

使用 Python 绘制词云图的详细教程

如何使用python绘制词云图

词云图(Word Cloud)是数据可视化中常用的一种技术,通过将文字以不同的大小、颜色和方向排列,以展示文本数据中词汇的频次和重要性。对于文本分析、情感分析、关键词提取等应用,词云图都能够直观地展现信息。本文将详细介绍如何使用 Python 中的 wordcloud 库从 Excel 数据绘制词云图,帮助您快速上手词云图的生成和定制化。

一、环境准备

在开始之前,请确保您的开发环境中已经安装了以下库:

pip install wordcloud pandas matplotlib openpyxl
  • wordcloud:用于生成词云图。
  • pandas:处理 Excel 文件中的词频数据。
  • matplotlib:用于展示和保存词云图。
  • openpyxl:读取 Excel 文件。

二、词云图的基本原理

词云图的生成主要基于词汇的频数,频数越高的词汇在图中的字号越大。在 Python 中,wordcloud 库提供了多种自定义选项,例如字体、颜色、形状、最大词数等。接下来,我们将基于一个简单的 Excel 词频表格,逐步实现从数据加载到词云图绘制的过程。

1.步骤一:读取 Excel 文件

首先,使用 pandas 读取 Excel 文件,并确保将词汇和对应的频数提取出来。假设 Excel 文件包含两列:词汇 和 频数。

import pandas as pd# 读取 Excel 文件
df = pd.read_excel('词汇频数表.xlsx')# 确保数据按需加载
words = df['词汇'].values
frequencies = df['频数'].values# 将词汇和频数组合成字典
word_freq = dict(zip(words, frequencies))

此时,word_freq 字典包含了词汇和它们对应的频数,格式如:{‘词汇1’: 10, ‘词汇2’: 15, …}。

2.步骤二:生成词云图

接下来,我们利用 wordcloud 库生成词云图。可以根据实际需求自定义词云图的显示样式。

from wordcloud import WordCloud
import matplotlib.pyplot as plt# 创建词云对象
wordcloud = WordCloud(font_path='simhei.ttf',  # 设置字体路径,确保中文显示background_color='white',  # 背景色width=800,  # 图像宽度height=400,  # 图像高度max_words=200,  # 最大词汇数max_font_size=100,  # 最大字体大小colormap='viridis'  # 颜色方案
).generate_from_frequencies(word_freq)# 绘制并展示词云图
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')  # 关闭坐标轴
plt.show()

参数说明

  • font_path:指定字体文件路径,这里使用了 “simhei.ttf” 以确保中文能够正确显示。
  • background_color:设置背景颜色,可选值包括 black, white, gray 等。
  • width 和 height:控制词云图的尺寸。
  • max_words:控制词云图中显示的最大词汇数。
  • max_font_size:控制最大字体的字号。
  • colormap:控制颜色映射方案,支持多种内置方案如 viridis, plasma, inferno 等。

3.步骤三:保存词云图

绘制完成后,您可以将词云图保存为图片文件,便于分享和展示。

# 保存词云图到文件
wordcloud.to_file('wordcloud.png')

一般在该步骤就已经结束啦~

4.步骤四:高级自定义(形状与颜色)

(1)自定义形状
词云图不仅可以是矩形,还可以根据特定的形状生成。例如,将词云限制在一张图片的轮廓内。您可以通过以下方法实现:

from PIL import Image
import numpy as np# 加载形状模板图片
mask = np.array(Image.open('mask.png'))# 生成带有形状的词云
wordcloud = WordCloud(font_path='simhei.ttf',background_color='white',mask=mask,  # 设置词云形状contour_width=1,  # 轮廓宽度contour_color='black'  # 轮廓颜色
).generate_from_frequencies(word_freq)# 展示词云图
plt.figure(figsize=(10, 10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()

关键点讲解

  • 高清图片作为 mask
    使用高分辨率的黑白圆形图片,词云的清晰度会显著提升。白色部分将作为背景,黑色部分是生成词云的区域。

  • contour_width 和 contour_color 参数
    设置轮廓宽度和颜色,可以让词云图的形状更加突出。

  • 调整 max_font_size 和 max_words
    通过控制词汇数量和最大字体大小,确保词云图在形状内分布均匀且美观。
    在这里插入图片描述
    这是换了一个爱丽丝Alice的mask的词云图。
    (2)自定义颜色
    如果想让词云中的词汇颜色更加多样,可以使用 ImageColorGenerator 从图片中提取颜色:

from wordcloud import ImageColorGenerator# 基于模板图片生成颜色
image_colors = ImageColorGenerator(mask)# 绘制词云图并应用颜色
plt.figure(figsize=(10, 10))
plt.imshow(wordcloud.recolor(color_func=image_colors), interpolation='bilinear')
plt.axis('off')
plt.show()

三、常见问题与解决方案

1.中文乱码问题:

使用 wordcloud 生成词云时,若不指定中文字体,中文会显示为方块。解决方法是指定支持中文的字体,例如 “simhei.ttf”。

2.词云生成不均匀:

尝试调整 max_font_size 和 mask 参数,使词云分布更为美观。

四、总结

本文详细介绍了如何从 Excel 表格生成词云图,并通过实例展示了词云图的自定义生成方法。词云图作为一种直观的数据可视化手段,在文本分析中有着广泛应用。可以再结合深度学习的自然语言处理技术,词云图可以进一步扩展用于更复杂的文本挖掘场景。

延伸阅读与学习资源推荐
Word_cloud

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot的异常java.lang.ClassNotFoundException: io.r2dbc.spi.ValidationDepth
  • 【算法基础实验】图论-最小生成树-Prim的即时实现
  • Java学习笔记(01)final关键字的使用
  • 【论文阅读】通用的语义-几何表征的机器人操作
  • EmguCV学习笔记 VB.Net 第6章 形状操作
  • K8S 版本发版
  • 电脑开机LOGO修改教程_BIOS启动图片替换方法
  • Compose知识分享
  • js实现点击图片放大效果
  • 科研绘图配色大全
  • 0821作业+思维导图
  • C++ //练习 18.22 已知存在如下所示的类的继承体系,其中每个类都定义了一个默认构造函数:
  • 虚拟机安装centos7-桥接模式
  • docker部署postgresSQL 并做持久化
  • 【JAVA CORE_API】Day19 多线程API(2)、多线程并发安全问题、同步
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • flutter的key在widget list的作用以及必要性
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • python docx文档转html页面
  • Vue学习第二天
  • 彻底搞懂浏览器Event-loop
  • 动态魔术使用DBMS_SQL
  • 关于使用markdown的方法(引自CSDN教程)
  • 后端_ThinkPHP5
  • 面试总结JavaScript篇
  • 前嗅ForeSpider中数据浏览界面介绍
  • 使用putty远程连接linux
  • 说说动画卡顿的解决方案
  • 译有关态射的一切
  • 终端用户监控:真实用户监控还是模拟监控?
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • Nginx实现动静分离
  • ​如何防止网络攻击?
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (4)(4.6) Triducer
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (分布式缓存)Redis分片集群
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (九)c52学习之旅-定时器
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四)Controller接口控制器详解(三)
  • (算法)大数的进制转换
  • (一)Neo4j下载安装以及初次使用
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转载)(官方)UE4--图像编程----着色器开发
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET MVC之AOP
  • .Net Web窗口页属性