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支持和多媒…...

权限大、数量多、破坏强、管理难......企业特权访问管理怎么管?
特权账号,通往企业数据大门的“钥匙”。 它权限大,具有高危命令或操作的执行权限; 破坏性强,操作可能影响他人使用或其他系统故障; 信息泄露风险大,操作可能获取别人或其他系统相关隐私信息;…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...