Python中的数据可视化:Matplotlib基础与高级技巧
Python中的数据可视化:Matplotlib基础与高级技巧
数据可视化是数据分析和数据科学中不可或缺的一部分。通过图表,我们可以更直观地观察数据的分布和趋势。Matplotlib作为Python最基础、也是最广泛使用的绘图库之一,不仅支持多种常用图表,还可以通过设置样式、添加注释等高级操作,满足各种定制化需求。本文将带你从Matplotlib的基础用法入手,再到一些高级技巧,全面掌握数据可视化的必备技能。

1. Matplotlib概述与安装
Matplotlib是Python的二维绘图库,专注于生成简单、清晰的图表。它特别适合数据分析工作流,与NumPy和Pandas等库的兼容性极高。首先,安装Matplotlib:
pip install matplotlib
导入Matplotlib
安装完成后,我们通常以plt作为别名导入Matplotlib的pyplot模块:
import matplotlib.pyplot as plt
import numpy as np

2. Matplotlib基础用法
2.1 绘制简单折线图
# 示例数据
x = np.linspace(0, 10, 100) # 生成0到10的等距数值
y = np.sin(x) # 计算y值# 绘制折线图
plt.plot(x, y, label='sin(x)', color='blue', linestyle='-', linewidth=2)
plt.xlabel('X-axis') # x轴标签
plt.ylabel('Y-axis') # y轴标签
plt.title('Simple Line Plot') # 图表标题
plt.legend() # 显示图例
plt.grid(True) # 显示网格线
plt.show()
在这个简单折线图中,我们定义了标签、标题、线条样式和颜色,并显示了网格线和图例。
2.2 设置样式与颜色
Matplotlib提供了丰富的样式与颜色选择,可以轻松定制图表风格。我们可以通过linestyle和color等参数来调整图表风格,还可以用内置的主题快速应用图表风格:
plt.style.use('ggplot') # 使用ggplot样式

3. 常见图表类型
Matplotlib支持多种图表类型,可以满足多种可视化需求。以下是几种常用的图表及其使用方法。
3.1 柱状图(Bar Chart)
柱状图适用于表示分类数据的数量分布。
# 示例数据
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 25]plt.bar(categories, values, color='skyblue')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Bar Chart Example')
plt.show()
3.2 散点图(Scatter Plot)
散点图用于展示两个变量之间的关系,特别适合展示点状数据。
# 示例数据
x = np.random.rand(50)
y = np.random.rand(50)
sizes = 100 * np.random.rand(50) # 点的大小
colors = np.random.rand(50) # 点的颜色plt.scatter(x, y, s=sizes, c=colors, alpha=0.6, cmap='viridis')
plt.colorbar() # 显示颜色条
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Scatter Plot Example')
plt.show()
3.3 直方图(Histogram)
直方图用于展示数据的分布情况,是观察数值型数据集中趋势和分布的好工具。
data = np.random.randn(1000) # 生成标准正态分布数据plt.hist(data, bins=30, color='purple', edgecolor='black', alpha=0.7)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram Example')
plt.show()
3.4 饼图(Pie Chart)
饼图用于展示各个类别占整体的比例。
# 示例数据
labels = ['Category A', 'Category B', 'Category C']
sizes = [15, 35, 50]plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title('Pie Chart Example')
plt.show()

4. 子图与布局调整
在数据分析中,经常需要在一张图中展示多种数据。Matplotlib支持使用subplots函数创建多子图,并通过调整布局使图表更紧凑。
# 创建2行2列的子图布局
fig, axes = plt.subplots(2, 2, figsize=(10, 8))# 绘制每个子图
axes[0, 0].plot(x, y, 'r') # 折线图
axes[0, 1].bar(categories, values) # 柱状图
axes[1, 0].scatter(x, y) # 散点图
axes[1, 1].hist(data, bins=20) # 直方图# 调整布局
fig.tight_layout()
plt.show()

5. 图表美化与高级技巧
5.1 添加注释
Matplotlib允许在图表中添加文本注释,以便标注出关键点或数据。
# 绘制简单折线图
plt.plot(x, y, label='sin(x)')# 添加注释
plt.annotate('Max Point', xy=(np.pi/2, 1), xytext=(np.pi/2+1, 1.5),arrowprops=dict(facecolor='black', shrink=0.05))plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Annotation Example')
plt.legend()
plt.show()
5.2 自定义坐标轴与网格
可以通过调整坐标轴的刻度、标签和样式来定制图表外观。
plt.plot(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Custom Axes and Grid')# 自定义坐标轴
plt.xticks(np.arange(0, 11, 2)) # 设置x轴刻度间隔
plt.yticks([-1, 0, 1]) # 设置y轴刻度# 自定义网格线
plt.grid(color='gray', linestyle='--', linewidth=0.5)plt.show()
5.3 双Y轴图表
对于需要展示两个不同变量(且单位不同)的图表,可以使用双Y轴。
# 数据
x = np.arange(0, 10, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)# 创建双Y轴
fig, ax1 = plt.subplots()ax1.plot(x, y1, 'g-', label='sin(x)')
ax1.set_xlabel('X-axis')
ax1.set_ylabel('sin(x)', color='g')# 创建第二个Y轴
ax2 = ax1.twinx()
ax2.plot(x, y2, 'b--', label='cos(x)')
ax2.set_ylabel('cos(x)', color='b')fig.tight_layout()
plt.title('Dual Y-Axis Example')
plt.show()

6. 保存图表
Matplotlib支持将生成的图表保存为多种格式(如PNG、PDF、SVG等)。可以使用savefig方法将图表保存到本地:
plt.plot(x, y)
plt.title('Save Plot Example')# 保存图表
plt.savefig('plot_example.png', dpi=300, bbox_inches='tight') # dpi设置图像清晰度,bbox_inches调整图表边距
plt.show()

7. 实战案例:销售数据分析
接下来,通过一个案例来整合上述技巧,分析销售数据并生成多个图表。
案例说明
假设我们有一组包含月度销售额和利润的数据,目标是分析月度趋势、销售额与利润的关系,并进行可视化展示。
7.1 数据准备
# 生成示例数据
months = np.arange(1, 13)
sales = np.random.randint(5000, 15000, size=12)
profits = sales * np.random.uniform(0.05, 0.15, size=12)
7.2 绘制分析图表
1. 月度销售趋势图
plt.plot(months, sales, marker='o', color='b', label='Sales')
plt.xlabel('Month')
plt.ylabel('Sales ($)')
plt.title('Monthly Sales Trend')
plt.legend()
plt.grid(True)
plt.show()
2. 销售额与利润的散点图
plt.scatter(sales, profits, color='purple')
plt.xlabel('Sales ($)')
plt.ylabel('Profit ($)')
plt.title('Sales vs. Profit')
plt.grid(True)
plt.show()
3. 多子图展示
fig,axs = plt.subplots(1, 2, figsize=(14, 6))# 折线图
axs[0].plot(months, sales, marker='o', label='Sales', color='blue')
axs[0].set_title('Monthly Sales Trend')
axs[0].set_xlabel('Month')
axs[0].set_ylabel('Sales ($)')# 散点图
axs[1].scatter(sales, profits, color='green')
axs[1].set_title('Sales vs. Profit')
axs[1].set_xlabel('Sales ($)')
axs[1].set_ylabel('Profit ($)')fig.tight_layout()
plt.show()

8. 总结
本文带领大家从基础到高级,全面介绍了Matplotlib的各种功能,包括基础图表、子图布局、注释、坐标轴定制、双Y轴图表等。同时,结合实战案例分析销售数据,展示了如何在真实场景中使用Matplotlib进行数据可视化。希望本文能帮助你掌握数据可视化的基本技能,并为日后的数据分析提供支持。

相关文章:
Python中的数据可视化:Matplotlib基础与高级技巧
Python中的数据可视化:Matplotlib基础与高级技巧 数据可视化是数据分析和数据科学中不可或缺的一部分。通过图表,我们可以更直观地观察数据的分布和趋势。Matplotlib作为Python最基础、也是最广泛使用的绘图库之一,不仅支持多种常用图表&…...
数组名和指针数组名深度复习
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //sizeof只关注占用内存空间的大小,不在乎内存中存放的是什么 //是操作符 /* int main() { char arr[] { "abcdef" }; //a b c d e f \0 printf("%d\n", sizeof(arr));//…...
Linux 诞生
目录 Linux诞生背景 Linus Torvalds的创举 Linux内核的首次发布 Linux诞生背景 在计算机操作系统的发展史上,Linux是一个重要的里程碑。它的诞生源于对自由、开放和协作精神的追求,以及对Unix操作系统的深入研究和改进。 在1991年之前,Un…...
借助Aspose.Email,管理受密码保护的 PST 文件
在当今的数字环境中,保护您的数据比以往任何时候都更加重要。确保您的电子邮件数据受到密码保护是维护安全性的关键步骤。对于使用 Microsoft Outlook 数据的开发人员来说,管理受密码保护的 PST(个人存储表)文件可能是一项关键任务…...
MySQL数据库MHA高可用
目录 一、MHA简述 二、MHA 的组成 三、MHA 的特点 四、MHA工作原理 五、MHA部署步骤 六、搭建 MySQL MHA MHA一主两从高可用集群示意图 实验环境 1. Master、Slave1、Slave2 节点上安装 mysql5.7 2. 关闭防火墙 3. 修改 Master、Slave1、Slave2 节点的主机名 4. 修…...
DevEco Studio使用技巧和插件推荐
DevEco Studio是一款强大的集成开发环境(IDE),为开发者提供了丰富的功能和插件。以下是一些使用技巧和插件推荐: 使用技巧 设置中文界面: 打开DevEco Studio,选择“Configure”,再点击“Prefer…...
使用Node.js与Express构建RESTful API
💖 博客主页:瑕疵的CSDN主页 💻 Gitee主页:瑕疵的gitee主页 🚀 文章专栏:《热点资讯》 使用Node.js与Express构建RESTful API 1 引言 2 Node.js与Express简介 3 安装Node.js与Express 4 创建Express项目 5…...
从0开始搭建一个生产级SpringBoot2.0.X项目(二)SpringBoot应用连接数据库集成mybatis-plus
前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 连接Oracle数据库集成mybatis-plus,自定义WrapperFactory。配置代码生成器 一、引入jar包 <!--oracle驱动 --><dependency><groupId>org.springframework.boot</groupI…...
Docker部署教程:打造流畅的斗地主网页小游戏
Docker部署教程:打造流畅的斗地主网页小游戏 一、项目介绍项目简介项目预览 二、系统要求环境要求环境检查Docker版本检查检查操作系统版本 三、部署斗地主网页小游戏下载镜像创建容器检查容器状态查看容器日志安全设置 四、访问斗地主网页小游戏五、总结 一、项目介…...
redis的客户端
目录 redis的客户端一:jedis1:jedis的使用步骤:2:jedis连接池 二:springDataRedis1:入门使用2:配置序列化器3:stringRedisTemplate redis的客户端 一:jedis 1:jedis的使…...
图片分类标注工具python
图片分类标注工具 运行代码:将代码保存到 Python 文件中并运行。选择文件夹:运行时会弹出对话框,选择要分类的图片文件夹。标注分类:程序会逐张显示图片,你可以在下方输入框中输入类别标签,并点击“Next”…...
Rust命令行,实现自动反编译Android APK包工具
Rust-CLI实现自动反编译APK Rust提供了比较好的CLI接口,可以快速的编写命令行应用, 用于日常的工具类使用。 分享一个用Rust命令行实现自动反编译Android APK包工具,是之前学习Rust写的一个练手小工具,可以快速反编译APK,同时也学习下用Rust…...
10. NSTableView Table 数据表格
表格是非常重要和复杂的一个控件,本节会用大量篇幅来把表格这东西力求讲清楚。 基本设置 表格结构 表格是 OS X 组件中为数不多采用了MVC设计模式来实现的控件,即tableView–dataSource–Delegate,这种分层架构给处理数据带来了极大的便利…...
javase笔记8---File与IO流
File类型 简介 在程序中,使用java.io.File这个类来描述和操作磁盘上的一个文件或文件夹(目录)。 File这个类,能新建、删除、移动,重命名文件或文件夹,也能获取或者修改文件或文件夹的信息(如大小,修改时间等)…...
docker上传离线镜像包到Artifactory
docker上传离线镜像包到Artifactory 原创 大阳 北京晓数神州科技有限公司 2024年10月25日 17:33 北京 随着docker官方源的封禁,最近国内资源也出现无法拉取的问题,Artifactory在生产环境中,很少挂外网代理去官方源拉取,小编提供…...
【专用名词的离线语音识别在2024年底的解决方法调查-会议签到的补充】
语音识别在会议点名中的使用 概要解决问题的过程不行的一些参考可以的一个package自定义词语的拼音转换遗留的问题 小结 概要 提示:这里可以添加技术概要 这里只实现一个方面,每个android会议设备都可通过语音发送参会者姓名,自动转换成文字添加到人员名单. 语音采集…...
OS基础-
OS基础 内存管理 内核用户设备管理 设备框架I/O子系统网络多媒体 音频视频运维 控制台GUIdebug审计计算机组成 CPU ALUregister SPLRPCR0-R12CPSRcacheclockInterrupt Vector tableIVTRMMU/MPU 内存访问权限配置,支持多进程BUSMEMORYI/O单线程 特点:结构…...
《大型语言模型实战指南:应用实践与场景落地》一文详解大型语言模型的11种微调方法
导读:大型预训练模型是一种在大规模语料库上预先训练的深度学习模型,它们可以通过在大量无标注数据上进行训练来学习通用语言表示,并在各种下游任务中进行微调和迁移。随着模型参数规模的扩大,微调和推理阶段的资源消耗也在增加。…...
嵌入式浏览器 -- Chromium VS Firefox
嵌入式浏览器概念 嵌入式浏览器是嵌入式系统中的核心组件之一,用于为设备提供网络访问能力和内容显示功能。与传统PC浏览器相比,嵌入式浏览器更加注重性能优化和资源效率,同时确保核心功能可用,如HTML渲染、JavaScript支持和多媒…...
权限大、数量多、破坏强、管理难......企业特权访问管理怎么管?
特权账号,通往企业数据大门的“钥匙”。 它权限大,具有高危命令或操作的执行权限; 破坏性强,操作可能影响他人使用或其他系统故障; 信息泄露风险大,操作可能获取别人或其他系统相关隐私信息;…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
