Matplotlib是Python中最基础、最广泛使用的数据可视化库,它提供了类似MATLAB的绘图接口,能够创建高质量的静态、动态和交互式图表。作为科学计算和数据可视化的核心工具,Matplotlib几乎成为Python数据科学生态系统的标准可视化组件。

今天与大家系统的回顾与总结一下Matplotlib库,为大家的应用提供指导。

目录

一、Matplotlib库的作用

二、Matplotlib核心模块及功能

基础绘图模块

图表定制与美化

多图与子图系统

3D可视化

高级功能与集成

动画与交互

三、Matplotlib工作流程

四、Matplotlib在实际项目中的应用场景

五、Matplotlib基础图表程序示例演示


一、Matplotlib库的作用

  1. 创建专业图表:线图、条形图、散点图、直方图等

  2. 多图组合:子图布局、多轴系统

  3. 定制化设计:全面控制颜色、线型、标记、文本等

  4. 多格式输出:支持PNG、PDF、SVG等格式

  5. 交互式探索:缩放、平移、保存视图

  6. 与其他库集成:与Pandas、NumPy、Seaborn无缝协作

二、Matplotlib核心模块及功能

基础绘图模块

函数/方法功能描述示例图表类型
plt.plot(x, y)创建线图或折线图折线图、函数曲线
plt.scatter(x, y)创建散点图相关性分析、聚类可视化
plt.bar(x, height)创建条形图类别比较、分布展示
plt.barh(y, width)创建水平条形图类别比较(长标签)
plt.hist(x, bins)创建直方图数据分布分析
plt.boxplot(data)创建箱线图数据分布、异常值检测
plt.pie(sizes)创建饼图占比关系可视化
plt.imshow(data)显示图像数据热力图、图像显示
plt.contour(X, Y, Z)创建等高线图三维数据二维展示
plt.quiver(X, Y, U, V)创建向量场图梯度场、流场可视化

图表定制与美化

函数/方法功能描述
plt.title(label)设置图表标题
plt.xlabel(label)设置X轴标签
plt.ylabel(label)设置Y轴标签
plt.xlim(min, max)设置X轴范围
plt.ylim(min, max)设置Y轴范围
plt.xticks(ticks, labels)设置X轴刻度和标签
plt.yticks(ticks, labels)设置Y轴刻度和标签
plt.grid(True)添加网格线
plt.legend(labels)添加图例
plt.text(x, y, text)在指定位置添加文本
plt.annotate(text, xy, xytext)添加带箭头的注释
plt.style.use(style)应用预定义样式('ggplot'等)
plt.rcParams.update(params)全局参数设置

多图与子图系统

函数/方法功能描述
plt.subplots(nrows, ncols)创建网格布局子图
plt.subplot2grid(shape, loc)创建不规则布局子图
fig.add_subplot(nrows, ncols, index)向图形添加子图
plt.tight_layout()自动调整子图间距
plt.subplots_adjust()手动调整子图布局
fig.add_axes(rect)添加自定义位置坐标轴

3D可视化

函数/方法功能描述示例图表类型
ax = plt.axes(projection='3d')创建3D坐标轴3D曲面图
ax.plot_surface(X, Y, Z)绘制3D曲面数学函数可视化
ax.scatter3D(x, y, z)绘制3D散点图三维数据点分布
ax.plot3D(x, y, z)绘制3D线图空间轨迹
ax.contour3D(X, Y, Z)绘制3D等高线等值面可视化
ax.view_init(elev, azim)设置3D视图角度视角控制

高级功能与集成

函数/方法功能描述
plt.colorbar(mappable)添加颜色条
plt.savefig(filename, dpi)保存图表到文件
plt.clf()清除当前图形
plt.close(fig)关闭指定图形
plt.show()显示所有图形
plt.gcf()获取当前图形对象
plt.gca()获取当前坐标轴对象
mpl.dates.DateFormatter(fmt)日期格式转换
mpl.ticker.FuncFormatter(func)自定义刻度格式

动画与交互

函数/方法功能描述
animation.FuncAnimation(fig, func, frames)创建动画
widgets.Button(ax, label)添加交互按钮
widgets.Slider(ax, label, valmin, valmax)添加滑块控件
widgets.RadioButtons(ax, labels)添加单选按钮
event_connect(event, callback)事件监听与回调

三、Matplotlib工作流程

  1. 准备数据:使用NumPy或Pandas准备数据

  2. 创建图形plt.figure()plt.subplots()

  3. 绘制图表:使用各种绘图函数(plotscatter等)

  4. 定制图表:添加标题、标签、图例等

  5. 调整布局tight_layout()自动优化间距

  6. 保存/显示savefig()保存或show()显示

四、Matplotlib在实际项目中的应用场景

  1. 数据探索:快速可视化数据分布和关系

  2. 科学计算:数学函数和方程可视化

  3. 机器学习:模型性能评估、特征重要性展示

  4. 统计分析:直方图、箱线图展示数据分布

  5. 时间序列分析:股票走势、气象数据可视化

  6. 地理信息:结合Basemap绘制地图数据

  7. 工程应用:信号处理、控制系统分析

  8. 学术出版:生成高质量论文图表

五、Matplotlib基础图表程序示例演示

import matplotlib.pyplot as plt
import numpy as np
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei'] #解决中文不显示问题
# 在创建图形前设置字体
plt.rcParams['font.family'] = 'sans-serif'  # 使用无衬线字体
#plt.rcParams['font.sans-serif'] = ['Arial', 'DejaVu Sans', 'SimHei']  # 备选字体列表
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 1. 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
categories = ['A', 'B', 'C', 'D']
values = [25, 40, 30, 45]# 2. 创建多子图布局
fig, axs = plt.subplots(2, 2, figsize=(12, 8))
fig.suptitle('Matplotlib综合示例', fontsize=16)# 3. 绘制折线图
axs[0, 0].plot(x, y1, 'r-', label='sin(x)')
axs[0, 0].plot(x, y2, 'b--', label='cos(x)')
axs[0, 0].set_title('三角函数曲线')
axs[0, 0].set_xlabel('X轴')
axs[0, 0].set_ylabel('Y轴')
axs[0, 0].legend()
axs[0, 0].grid(True, linestyle='--', alpha=0.7)# 4. 绘制散点图
np.random.seed(42)
x_scatter = np.random.rand(50) * 10
y_scatter = 2 * x_scatter + np.random.randn(50) * 2
axs[0, 1].scatter(x_scatter, y_scatter, c='green', alpha=0.7, edgecolors='black', s=80)
axs[0, 1].set_title('散点图示例')
axs[0, 1].set_xlabel('自变量')
axs[0, 1].set_ylabel('因变量')# 5. 绘制条形图
axs[1, 0].bar(categories, values, color=['skyblue', 'salmon', 'lightgreen', 'gold'])
axs[1, 0].set_title('类别数据比较')
axs[1, 0].set_xlabel('类别')
axs[1, 0].set_ylabel('数值')
# 添加数据标签
for i, v in enumerate(values):axs[1, 0].text(i, v+1, str(v), ha='center')# 6. 绘制饼图
explode = (0.1, 0, 0, 0)  # 突出显示第一项
axs[1, 1].pie(values, explode=explode, labels=categories, autopct='%1.1f%%',shadow=True, startangle=90, colors=['skyblue', 'salmon', 'lightgreen', 'gold'])
axs[1, 1].set_title('占比分布饼图')# 7. 调整布局
plt.tight_layout()
plt.subplots_adjust(top=0.9)# 8. 保存和显示
plt.savefig('matplotlib_example.png', dpi=300)
plt.show()

Matplotlib的学习曲线相对陡峭,但掌握其核心概念后,你将拥有创建任何类型数据可视化的能力。它不仅是Python可视化的基础,也是深入理解更高级可视化库(如Seaborn、Plotly)的前提。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日算法刷题Day59:8.9:leetcode 队列8道题,用时2h30min

一、基础 1.套路 1.队列常用在 BFS 中&#xff0c;见 网格图题单 和 图论题单。 2.队列(queue)是容器适配器&#xff0c;功能较少。 队尾插入元素&#xff0c;队首弹出元素&#xff0c;可以访问队首元素、队尾元素和队列长度。 无begin(),end()等迭代器 queue<int> qu…

Java选手如何看待Golang

写在前面&#xff1a;翻了很多博客&#xff0c;一直没有Java选手转行golang的学习经验贴&#xff0c;思考很久&#xff0c;写下这篇Java选手怎么看待golang这个冉冉新星。1.走完所有golang基础之后的感受&#xff08;1&#xff09;最大的不适应有这么几点&#xff1a;---变量定…

Codeforces Round 967 (Div. 2) D. Longest Max Min Subsequence

假设我们要选a[j]为答案数组b[i]&#xff0c;从i从1~m&#xff08;m为a数组中不同数的个数&#xff09;建立一个suf数组&#xff0c;代表以i开头的后缀有多少个不同且在b[1~i-1]中未出现过的的个数&#xff0c;预处理suf&#xff0c;发现后续我们怎么选数改变suf&#xff0c;su…

Linux运维新手的修炼手扎之第27天

mysql服务1 主从复制集群&#xff1a;多主机集群【复制】负载过大解决方案&#xff1a;横向扩展[增加服务器节点分散负载]、纵向扩展[提升单机硬件性能]复制工作原理&#xff1a;前提&#xff1a;基础数据一样&#xff0c;主节点上有同步数据用的账号主角色【二进制日志、binlo…

【Linux】Linux增删改查命令大全(附频率评级)

Linux增删改查命令大全&#xff08;附频率评级&#xff09;* 《Linux命令全景手册&#xff1a;增删改查全场景解析&#xff08;含136个高频命令&#xff09;》 按使用频率★分级 | 测试/运维/开发均适用 | 附思维导图下载一、命令全景表&#xff08;增删改查频率评级&#xff0…

SwiftUI 登录页面键盘约束冲突与卡顿优化全攻略

网罗开发&#xff08;小红书、快手、视频号同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

建筑物实例分割数据集-9,700 张图片 城市规划与发展 灾害评估与应急响应 房地产市场分析 智慧城市管理 地理信息系统(GIS) 环境影响评估

建筑物实例分割数据集-9,700 张图片&#x1f4e6; 已发布目标检测数据集合集&#xff08;持续更新&#xff09;&#x1f3e2; 建筑物实例分割数据集介绍&#x1f4cc; 数据集概览包含类别&#x1f3af; 应用场景&#x1f5bc; 数据样本展示使用建议&#x1f31f; 数据集特色&am…

LeetCode 刷题【36. 有效的数独】

36. 有效的数独 自己做 解&#xff1a;多层for class Solution { public:bool isValidSudoku(vector<vector<char>>& board) {int hight board.size(); //长if (hight 0)return true;int wide board[0].size(); //宽//判断一行是否出现重复bool…

Java 日志从入门到精通:告别日志混乱

作为一名 Java 开发者&#xff0c;你是否曾在生产环境故障排查时面对过这样的困境&#xff1a;系统报错却找不到关键日志&#xff0c;日志文件大到无法打开&#xff0c;或者日志内容杂乱无章根本无法定位问题&#xff1f;日志作为系统运行的 “黑匣子”&#xff0c;其重要性不言…

系统开发 Day1

前端开发 目的&#xff1a; 开发一个平台&#xff08;网站&#xff09; - 前端开发&#xff1a;HTML CSS JavaScript - web框架&#xff1a;接受请求和处理 - MySQL数据库&#xff1a;存储数据的地方快速上手&#xff1a;基于Flask Web框架快速搭建一个网站 深度学习&#xff…

机器视觉任务(目标检测、实例分割、姿态估计、多目标跟踪、单目标跟踪、图像分类、单目深度估计)常用算法及公开数据集分享

本文按目标检测、实例分割、姿态估计、多目标跟踪、单目标跟踪、图像分类、单目深度估计七个任务分类&#xff0c;融合数据集介绍、评价指标及推荐算法&#xff0c;方便查阅&#xff1a; 一、目标检测 目标检测任务需定位图像中目标的边界框&#xff08;bounding box&#xff0…

MongoTemplate中setOnInsert与set方法的深度解析

MongoTemplate中setOnInsert与set方法的深度解析 在Spring Data MongoDB的MongoTemplate中&#xff0c;setOnInsert和set方法都是在更新文档时使用的&#xff0c;但它们在处理upsert操作&#xff08;即&#xff0c;如果文档不存在则插入&#xff0c;存在则更新&#xff09;时扮…

利用OJ判题的多语言优雅解耦方法深入体会模板方法模式、策略模式、工厂模式的妙用

在线评测系统&#xff08;Online Judge, OJ&#xff09;的核心是判题引擎&#xff0c;其关键挑战在于如何高效、安全且可扩展地支持多种编程语言。在博主的项目练习过程中&#xff0c;借鉴了相关设计模式实现一种架构设计方案&#xff0c;即通过组合运用模板方法、策略、工厂等…

[FOC电机控制]霍尔传感器于角度问题

如果电机有1对极(p1&#xff0c;那么每旋转一圈的机械角度&#xff0c;电气角度会转动一圈&#xff08;360&#xff09;。如果电机有2对极(p2&#xff0c;那么每旋转一圈的机械角度&#xff0c;电气角度会转动两圈&#xff08;720&#xff09;。

阿里云 Flink

阿里云 Flink 是阿里云基于Apache Flink打造的企业级实时计算平台&#xff0c;旨在为用户提供高效、稳定、易用的流处理与批处理能力&#xff0c;帮助企业快速构建实时数据处理链路&#xff0c;支撑实时业务决策。核心特性流批一体计算继承 Apache Flink “流批一体” 的核心优…

企业级高性能web服务器

1 web服务基础 1.1 正常情况的单次web服务访问流程&#xff1a; 正常情况下&#xff0c;单次 Web 服务访问流程从用户在客户端发起请求开始&#xff0c;到最终在客户端展示内容结束&#xff0c;涉及客户端、网络传输、服务器端等多个环节&#xff0c;以下是详细过程&#xff…

免费PDF编辑软件 pdf24-creator 及其安装包

最近发现了一款还算是不错的PDF编辑和阅读软件 pdf24-creator&#xff0c;官方下载网站为&#xff1a;https://tools.pdf24.org/zh/creator&#xff0c;但是官方下载如果没有魔法的话&#xff0c;下载速度很慢&#xff0c;比百度网盘下载还满&#xff0c;因此我把它分享到网盘。…

openvela之ADB

ADB&#xff08;Android Debug Bridge&#xff09;是一款功能丰富的命令行工具&#xff0c;旨在实现开发工作站与设备&#xff08;如模拟器、实体设备&#xff09;之间的通信。通过 ADB&#xff0c;开发者可以便捷地在设备上执行命令、传输文件、调试应用等。本文将详细介绍 AD…

如何控制需求交付节奏

有效控制需求的交付节奏&#xff0c;其核心在于将产品开发过程从一个不可预测的、时快时慢的混乱状态&#xff0c;转变为一套产出稳定、流程顺畅、步调可持续的系统化交付机制。要成功构建这套机制&#xff0c;实现有节奏的价值交付&#xff0c;必须综合运用五大关键策略&#…

汇编中常用寄存器介绍

X86-32位寄存器 4个数据寄存器&#xff1a;EAX、EBX、ECX和EDX; 2个变址和指针寄存器&#xff1a;ESI和EDI; 2个指针寄存器&#xff1a;ESP和EBP; 1个指令指针寄存器&#xff1a;EIP; 6个段寄存器&#xff1a;ES、CS、SS、DS、FS和GS; 1个标志寄存器&#xff1a;EFlags。 在X8…