Matplotlib完全指南:数据可视化从入门到实战
目录
引言
一、环境配置与基础概念
1.1 安装Matplotlib
1.2 导入惯例
1.3 两种绘图模式
二、基础图形绘制
2.1 折线图(Line Plot)
2.2 柱状图(Bar Chart)
三、高级图表类型
3.1 散点图(Scatter Plot)
3.2 饼图(Pie Chart)
3.3 直方图(Histogram)
四、多图布局与样式定制
4.1 子图布局(Subplots)
4.2 样式定制(StyleCustomization)
五、三维可视化
5.1 3D曲面图
六、实战案例:销售数据分析
案例1:多维度销售趋势分析
案例2:动态交互式可视化
七、高级技巧与优化
7.1 样式美化
7.2 输出高清图像
7.3 性能优化
八、常见问题解决方案
8.1 中文显示问题
8.2 坐标轴科学计数法
结语
引言
Matplotlib是Python最强大的数据可视化库,可以创建高质量的2D/3D图形,完美支持科学计算与数据分析。本文将深入讲解Matplotlib的核心功能,通过20+个实战案例,带你从基础绘图到高级可视化技巧,全面掌握数据图形化表达!
一、环境配置与基础概念
1.1 安装Matplotlib
pip install matplotlib
1.2 导入惯例
import matplotlib.pyplot as plt # 主要接口
import numpy as np # 配合使用
1.3 两种绘图模式
-
脚本模式:
plt.plot() + plt.show() -
面向对象模式(推荐):
fig, ax = plt.subplots() ax.plot(x, y)
二、基础图形绘制
2.1 折线图(Line Plot)
x = np.linspace(0, 10, 100)
y = np.sin(x)fig, ax = plt.subplots(figsize=(8,4))
ax.plot(x, y, color='red', linestyle='--', linewidth=2,marker='o',markersize=5,label='sin(x)')
ax.set_title("正弦曲线示例")
ax.set_xlabel("X轴")
ax.set_ylabel("Y轴")
ax.legend()
plt.show()

2.2 柱状图(Bar Chart)
categories = ['A', 'B', 'C', 'D']
values = [25, 40, 30, 45]fig, ax = plt.subplots()
bars = ax.bar(categories, values, color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728'],edgecolor='black')# 添加数值标签
for bar in bars:height = bar.get_height()ax.text(bar.get_x() + bar.get_width()/2., height,f'{height}',ha='center', va='bottom')ax.set_ylim(0, 50)
ax.grid(axis='y', linestyle='--')

三、高级图表类型
3.1 散点图(Scatter Plot)
x = np.random.randn(100)
y = x * 2 + np.random.randn(100)fig, ax = plt.subplots()
scatter = ax.scatter(x, y, c=np.abs(x+y), # 颜色映射s=50, # 点大小cmap='viridis',alpha=0.7)
plt.colorbar(scatter, label='强度值')
3.2 饼图(Pie Chart)
labels = ['电子产品', '服饰', '食品', '图书']
sizes = [35, 25, 20, 20]
explode = (0.1, 0, 0, 0) # 突出显示第一项fig, ax = plt.subplots()
ax.pie(sizes, explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90)
ax.axis('equal') # 正圆形
3.3 直方图(Histogram)
data = np.random.normal(170, 10, 1000)fig, ax = plt.subplots()
ax.hist(data, bins=30,density=True, # 显示概率密度histtype='stepfilled',color='skyblue',edgecolor='black')
ax.set_xlabel("Height distribution")
ax.set_ylabel("probability density")
四、多图布局与样式定制
4.1 子图布局(Subplots)
x = np.random.randn(100)
y = x * 2 + np.random.randn(100)
data = np.random.normal(170, 10, 1000)
labels = ['electronics', 'costume', 'food', 'book']
sizes = [35, 25, 20, 20]fig, axs = plt.subplots(2, 2, figsize=(10,8))# 第一个子图
axs[0,0].plot(x, y)
axs[0,0].set_title("折线图")# 第二个子图
axs[0,1].scatter(x, y)# 第三个子图
axs[1,0].hist(data)# 第四个子图
axs[1,1].pie(sizes, labels=labels)plt.tight_layout() # 自动调整间距
4.2 样式定制(StyleCustomization)
x = np.random.randn(10)
y = x * 2 + np.random.randn(10)
plt.style.use('ggplot') # 使用内置主题fig, ax = plt.subplots()
ax.plot(x, y, linewidth=2,marker='D',markersize=8,markerfacecolor='yellow',markeredgecolor='black')# 设置刻度参数
ax.tick_params(axis='both', which='major', labelsize=12,direction='inout')# 设置网格线
ax.grid(True, linestyle='--', alpha=0.6)# 设置坐标轴范围
ax.set_xlim(0, 10)
ax.set_ylim(-1.5, 1.5)
五、三维可视化
5.1 3D曲面图
from mpl_toolkits.mplot3d import Axes3DX = np.linspace(-5, 5, 100)
Y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X**2 + Y**2))fig = plt.figure(figsize=(10,6))
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap='viridis',antialiased=True)
fig.colorbar(surf, shrink=0.5)
六、实战案例:销售数据分析
案例1:多维度销售趋势分析
months = ['Jan', 'Feb', 'Mar', 'Apr']
sales_2023 = [120, 145, 178, 205]
sales_2024 = [135, 160, 190, None] # 模拟缺失值fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12,5))# 左侧:双折线图
ax1.plot(months, sales_2023, marker='o', label='2023')
ax1.plot(months[:3], sales_2024[:3], marker='s', label='2024')
ax1.set_title("月度销售趋势对比")
ax1.legend()# 右侧:柱状图
ax2.bar(months, sales_2023, alpha=0.7, label='2023')
ax2.bar(months, sales_2024, alpha=0.7, label='2024', bottom=sales_2023)
ax2.set_title("累计销售额对比")
案例2:动态交互式可视化
from matplotlib.animation import FuncAnimationfig, ax = plt.subplots()
xdata, ydata = [], []
ln, = ax.plot([], [], 'ro')def init():ax.set_xlim(0, 2*np.pi)ax.set_ylim(-1, 1)return ln,def update(frame):xdata.append(frame)ydata.append(np.sin(frame))ln.set_data(xdata, ydata)return ln,ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),init_func=init, blit=True)
plt.show()
七、高级技巧与优化
7.1 样式美化
plt.rcParams.update({'font.family': 'SimHei', # 中文字体'font.size': 12,'axes.titlesize': 14,'axes.labelsize': 12
})
7.2 输出高清图像
fig.savefig('output.png', dpi=300, # 分辨率bbox_inches='tight', facecolor='white')
7.3 性能优化
使用
ax.plot()替代多次plt.plot()对于大数据集使用
numpy进行预计算关闭交互模式:
plt.ioff()
八、常见问题解决方案
8.1 中文显示问题
# 方法1:指定中文字体
plt.rcParams['font.family'] = 'SimHei'# 方法2:动态加载字体
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='msyh.ttc', size=12)
ax.set_title("标题", fontproperties=font)
8.2 坐标轴科学计数法
ax.ticklabel_format(axis='y', style='sci', scilimits=(0,0))
结语
Matplotlib是数据可视化的瑞士军刀,本文涵盖了其核心功能的80%。建议通过以下方式精进:
每天练习一种图表类型
研究优秀可视化案例的源码
学习结合Pandas直接绘图
探索Seaborn等高级封装库
相关文章:
Matplotlib完全指南:数据可视化从入门到实战
目录 引言 一、环境配置与基础概念 1.1 安装Matplotlib 1.2 导入惯例 1.3 两种绘图模式 二、基础图形绘制 2.1 折线图(Line Plot) 2.2 柱状图(Bar Chart) 三、高级图表类型 3.1 散点图(Scatter Plotÿ…...
在大数据开发中ETL是指什么?
hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字经济时代,数据已成为企业最核心的资产。然而,分散在业务系统、日志文件…...
OAuth 2.0认证
文章目录 1. 引言1.1 系列文章说明1.2 OAuth 2.0 的起源与演变1.3 应用场景概览 2. OAuth 2.0 核心概念2.1 角色划分2.2 核心术语解析 3. 四种授权模式详解3.1 授权码模式(Authorization Code Grant)3.1.1 完整流程解析3.1.2 PKCE 扩展(防止授…...
【Linux 下的 bash 无法正常解析, Windows 的 CRLF 换行符问题导致的】
文章目录 报错原因:解决办法:方法一:用 dos2unix 修复方法二:手动转换换行符方法三:VSCode 或其他编辑器手动改 总结 这个错误很常见,原因是你的 wait_for_gpu.sh 脚本 文件格式不对,具体来说…...
Kubernetes的Replica Set和ReplicaController有什么区别
ReplicaSet 和 ReplicationController 是 Kubernetes 中用于管理应用程序副本的两种资源,它们有类似的功能,但 ReplicaSet 是 ReplicationController 的增强版本。 以下是它们的主要区别: 1. 功能的演进 ReplicationController 是 Kubernete…...
WSL 导入完整系统包教程
作者: DWDROME 配置环境: OS: Ubuntu 20.04.6 LTS on Windows 11 x86_64Kernel: 5.15.167.4-microsoft-standard-WSL2ros-noetic 🧭WSL 导入完整系统包教程 ✅ 一、准备导出文件 假设你已有一个 .tar 的完整系统包(如从 WSL 或 L…...
[Lc_2 二叉树dfs] 布尔二叉树的值 | 根节点到叶节点数字之和 | 二叉树剪枝
目录 1.计算布尔二叉树的值 题解 2.求根节点到叶节点数字之和 3. 二叉树剪枝 题解 1.计算布尔二叉树的值 链接:2331. 计算布尔二叉树的值 给你一棵 完整二叉树 的根,这棵树有以下特征: 叶子节点 要么值为 0 要么值为 1 ,其…...
SOFABoot-07-版本查看
前言 大家好,我是老马。 sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…...
蓝桥杯 之 第27场月赛总结
文章目录 习题1.抓猪拿国一2.蓝桥字符3.蓝桥大使4.拳头对决 习题 比赛地址 1.抓猪拿国一 十分简单的签到题 print(sum(list(range(17))))2.蓝桥字符 常见的字符匹配的问题,是一个二维dp的问题,转化为对应的动态规划求解 力扣的相似题目 可以关注灵神…...
第十六章:Specialization and Overloading_《C++ Templates》notes
Specialization and Overloading 一、模板特化与重载的核心概念二、代码实战与测试用例三、关键知识点总结四、进阶技巧五、实践建议多选题设计题代码测试说明 一、模板特化与重载的核心概念 函数模板重载 (Function Template Overloading) // 基础模板 template<typename…...
可视化动态表单动态表单界的天花板--Formily(阿里开源)
文章目录 1、Formily表单介绍2、安装依赖2.1、安装内核库2.2、 安装 UI 桥接库2.3、Formily 支持多种 UI 组件生态: 3、表单设计器3.1、核心理念3.2、安装3.3、示例源码 4、场景案例-登录注册4.1、Markup Schema 案例4.2、JSON Schema 案例4.3、纯 JSX 案例 1、Form…...
Amdahl 定律
Amdahl 定律是用来表示,当提高系统某部分性能时对整个系统的影响,其公式如下: a表示我们提升部分初始耗时比例,k是我们的提升倍率,通过这个公式我们可以轻松的得知对每一部分的提醒,对整个系统带来的影响…...
rust学习笔记19-泛型
Rust 的泛型(Generics)允许编写可复用的代码,通过抽象类型或行为来避免重复逻辑。 1. 泛型的基本使用 函数泛型 在函数中定义泛型参数,支持不同类型的数据操作: fn max<T: PartialOrd>(a: T, b: T) -> T …...
Linux系统之美:环境变量的概念以及基本操作
本节重点 理解环境变量的基本概念学会在指令和代码操作上查询更改环境变量环境变量表的基本概念父子进程间环境变量的继承与隔离 一、引入 1.1 自定义命令(我们的exe) 我们以往的Linux编程经验告诉我们,我们在对一段代码编译形成可执行文件后…...
数学爱好者写的编程系列文章
作为一个数学爱好者,我大学读的专业却不是数学专业,而是跟计算机有关的专业。原本我对编程一窍不通,平时上课也是在看数学文献,作业基本靠同学,考试及格就行。不过后来因为毕业的压力,我还是拥抱编程了&…...
pnpm 报错 Error: Cannot find matching keyid 解决
1. 查看corepack版本,升级至0.31.0 npm i -g corepack0.31.0 这里注意环境变量,可能升级后还是指向旧版本,可以选择更新环境变量或者删除原指向的corepack命令 2. 更新pnpm corepack install -g pnpmlatest 问题解决。...
dcat-admin已完成项目部署注意事项
必须 composer update 更新项目php artisan admin:publish 发布dcatadmin的静态资源手动创建目录(如果没有) storage/appstorage/framework/cachestorage/framework/sessionsstorage/framework/views 需检查 php不要禁用以下函数 putenvsymlinkproc_…...
Ubuntu实时读取音乐软件的音频流
文章目录 一. 前言二. 开发环境三. 具体操作四. 实际效果 一. 前言 起因是这样的,我需要在Ubuntu中,实时读取正在播放音乐的音频流,然后对音频进行相关的处理。本来打算使用的PipewireHelvum的方式实现,好处是可以直接利用Helvum…...
大语言模型进化论:从文本理解到多模态认知的革命之路
一、Transformer:认知革命的基石 ### 1.1 自注意力机制:神经网络的"量子纠缠" python # 自注意力核心公式实现 def self_attention(Q, K, V, maskNone): d_k Q.size(-1) scores torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(…...
《Operating System Concepts》阅读笔记:p460-p4470
《Operating System Concepts》学习第 36 天,p460-p4470 总结,总计 11 页。 一、技术总结 无。 二、英语总结(生词:3) 1.lifespan (1)lifespan: life span(“the period of time that sth exists or happens”) c. 也写作 life-span, …...
Postgresql 删除数据库报错
1、删除数据库时,报错存在其他会话连接 ## 错误现象,存在其他的会话连接正在使用数据库 ERROR: database "cs" is being accessed by other users DETAIL: There is 1 other session using the database.2、解决方法 ## 终止被删除数据库下…...
Fiddler抓包工具最快入门
目录 前言 了解HTTP网络知识 简单了解网络访问过程 简单了解HTTP网络传输协议 工作过程 HTTP请求: Fildder工具使用教程 抓包的概念 一、什么是抓包 二、为什么要抓包 三、抓包的原理(图解) Fiddler工具 安装 使用 Fiddler查看…...
编译器与中间表示:LLVM与GCC、G++、Clang的关系详解
编译器与中间表示:LLVM与GCC、G、Clang的关系详解 引言 编译器是软件开发中不可或缺的工具,它负责将高级语言(如C/C、Java等)转换为机器语言,使计算机能够理解和执行程序。中间表示(Intermediate Represe…...
《深度剖析:鸿蒙系统不同终端设备的UI自适应布局策略》
在万物互联的时代,鸿蒙系统以其独特的分布式理念和强大的技术架构,迅速在智能终端领域崭露头角。随着鸿蒙生态的不断壮大,越来越多的开发者投身其中,致力于为用户打造丰富多样的应用体验。然而,如何让应用在不同终端设…...
股指期货贴水波动,影响哪些投资策略?
先来说说“贴水”。简单来说,贴水就是股指期货的价格比现货价格低。比如,沪深300指数现在是4000点,但股指期货合约的价格只有3950点,这就叫贴水。贴水的大小会影响很多投资策略的收益,接下来我们就来看看具体的影响。 …...
1.1 结构体与类对象在List中使用区别
一、问题的起源如下的代码是错误的,无法编译通过 struct Point {public int X;public int Y; }List<Point> points new List<Point> { new Point { X 1, Y 2 } }; points[0].X 10; // 编译错误!无法修改副本的字段 二、原因分析 在C#中&…...
matlab近似计算联合密度分布
在 Matlab 中,当A和B是两个序列数据时,可以通过以下步骤来近似求出A大于B的概率分布:数据准备:确保序列A和B具有相同的长度。如果长度不同,需要进行相应的处理(例如截取或插值)。计算A大于B的逻…...
基于WebAssembly的浏览器密码套件
目录 一、前言二、WebAssembly与浏览器密码套件2.1 WebAssembly技术概述2.2 浏览器密码套件的需求三、系统设计思路与架构3.1 核心模块3.2 系统整体架构图四、核心数学公式与算法证明4.1 AES-GCM加解密公式4.2 SHA-256哈希函数五、异步任务调度与GPU加速设计5.1 异步任务调度5.…...
RHCE 使用nginx搭建网站
一。准备工作 Windows dns映射 创建目录网页 vim 编辑内容 添加如下 重启nginx服务,在Windows浏览器进行测试...
pcap流量包分析
先说一个阿里云学生无门槛免费领一年2核4g服务器的方法: 阿里云服务器学生无门槛免费领一年2核4g_阿里云学生认证免费服务器-CSDN博客 PCAP文件是一种网络数据包捕获文件格式,通常被用来捕获和存储网络流量数据。对PCAP文件进行分析可以帮助识别网络中的…...
