Matplotlib 教程(千字长文)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

在数据分析与可视化领域,Matplotlib 教程是每位开发者不可或缺的技能之一。无论是学术研究、商业报告还是个人项目,通过直观的图表呈现数据关系,能够显著提升信息传达的效率。对于编程初学者而言,Matplotlib 的学习曲线可能显得陡峭,但本文将通过循序渐进的讲解和生动的比喻,帮助读者快速掌握其核心功能。中级开发者也能通过进阶技巧章节,发现新的应用场景。


一、Matplotlib 的核心概念与环境准备

1.1 Matplotlib 是什么?

Matplotlib 是一个基于 Python 的绘图库,支持生成静态、动态和交互式图表。它提供了类似 MATLAB 的接口,但完全开源且高度可定制。想象 Matplotlib 是一个“可视化工具箱”,用户可以通过调用其函数,像拼乐高积木一样组合出复杂的图表。

1.2 安装与基础导入

安装 Matplotlib 非常简单:

pip install matplotlib  

在代码中,通常以以下方式导入:

import matplotlib.pyplot as plt  

其中 plt 是约定俗成的缩写,类似于数学中的符号系统,方便后续调用函数。


二、基础绘图:从零开始构建图表

2.1 第一个图表:绘制折线图

假设我们想展示某公司近五年的营收增长情况。首先准备数据:

years = [2019, 2020, 2021, 2022, 2023]  
revenue = [100, 150, 200, 250, 300]  

接下来,调用 plt.plot() 函数生成折线图:

plt.plot(years, revenue)  
plt.show()  

执行后,会弹出一个窗口显示简单但完整的折线图。

2.2 添加图表元素:标题、坐标轴标签与网格

上述图表缺少关键信息,需要添加标题、坐标轴标签和网格线。这就像在房屋装修中,先规划墙面布局再装饰细节:

plt.plot(years, revenue)  
plt.title("Company Revenue Growth (2019-2023)")  
plt.xlabel("Year")  
plt.ylabel("Revenue (Millions USD)")  
plt.grid(True)  
plt.show()  

此时图表会更清晰易懂。

2.3 绘制散点图与柱状图

散点图:探索数据分布

若想分析广告投入与销售额的关系,可以使用散点图:

ads_budget = [50, 60, 70, 80, 90]  
sales = [80, 95, 110, 130, 145]  

plt.scatter(ads_budget, sales, color="green", marker="x")  
plt.title("Ads Budget vs Sales")  
plt.show()  

marker="x" 参数定义了点的形状,类似用不同笔触在纸上标记关键点。

柱状图:比较类别数据

若需比较不同产品的市场份额:

products = ["Product A", "Product B", "Product C"]  
market_share = [45, 30, 25]  

plt.bar(products, market_share, color=["red", "blue", "yellow"])  
plt.title("Market Share Distribution")  
plt.show()  

颜色参数 color 允许自定义,就像为不同产品设计专属标识。


三、定制图表元素:从基础到专业

3.1 图例与图例位置

当图表包含多组数据时,图例(Legend)是不可或缺的:

plt.plot(years, revenue, label="Revenue")  
plt.plot(years, [80, 90, 100, 110, 120], label="Expenses")  

plt.legend()  # 显示图例  
plt.show()  

通过 label 参数为每条线命名,plt.legend() 控制图例的位置,默认在右上角,也可通过 loc 参数调整,例如 loc="lower left"

3.2 坐标轴范围与刻度控制

默认坐标轴范围可能无法突出数据重点。例如,若想强调营收增长的幅度:

plt.plot(years, revenue)  
plt.title("Revenue Growth with Custom Y-axis")  
plt.ylim(0, 350)  # 设置 Y 轴范围为 0-350  
plt.yticks([50, 150, 250, 350])  # 自定义 Y 轴刻度  
plt.show()  

类似调整相机的取景框,通过 xlim()ylim() 可聚焦关键区域。

3.3 线条样式与颜色

Matplotlib 提供丰富的样式选项,通过参数组合实现多样化效果:

plt.plot(years, revenue, color="red", linestyle="--", linewidth=2)  
plt.show()  

可用的 linestyle 包括 "--", ":", "-" 等,color 支持十六进制代码(如 #FF5733)或预定义名称(如 green)。


四、高级技巧:子图、三维绘图与样式库

4.1 子图布局:多图表共存

使用 plt.subplots() 可创建多图表布局,例如将折线图与散点图并排展示:

fig, axes = plt.subplots(1, 2, figsize=(12, 5))  # 1行2列  

axes[0].plot(years, revenue)  
axes[0].set_title("Revenue Over Time")  

axes[1].scatter(ads_budget, sales)  
axes[1].set_title("Ads Budget vs Sales")  

plt.tight_layout()  # 自动调整间距  
plt.show()  

figsize 参数控制整个画布的尺寸,类似调整画布的物理大小。

4.2 三维绘图:探索空间数据

若需可视化三维数据(如温度、湿度、时间的关联),可借助 mplot3d 工具包:

from mpl_toolkits.mplot3d import Axes3D  

fig = plt.figure()  
ax = fig.add_subplot(111, projection="3d")  

x = [1, 2, 3, 4, 5]  
y = [5, 6, 7, 8, 9]  
z = [2, 3, 7, 5, 4]  

ax.scatter(x, y, z, c="purple", s=100)  # s 控制点的大小  
ax.set_xlabel("X Axis")  
ax.set_ylabel("Y Axis")  
ax.set_zlabel("Z Axis")  
plt.show()  

三维坐标系的建立类似于搭建立体模型,通过 projection="3d" 启用三维模式。

4.3 自定义样式与主题

Matplotlib 提供预定义样式库,可通过 plt.style 快速切换主题:

plt.style.use("ggplot")  # 使用 ggplot 风格  
plt.plot(years, revenue)  
plt.show()  

此外,用户还可通过 rcParams 自定义全局参数,例如:

plt.rcParams["font.size"] = 12  # 设置全局字体大小  

五、常见问题与实用技巧

5.1 图表保存为图片

使用 plt.savefig() 可将图表保存为 PNG、PDF 等格式:

plt.plot(years, revenue)  
plt.savefig("revenue_plot.png", dpi=300)  # dpi 控制清晰度  

5.2 中文字体显示问题

在中文环境下,可能遇到乱码问题。解决方法是手动设置字体:

plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置黑体  
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题  

5.3 动态交互式图表

通过 plt.ion()plt.ioff() 可启用交互模式,适合实时数据可视化:

plt.ion()  
plt.plot([1, 2, 3])  
plt.show()  
plt.pause(2)  # 暂停 2 秒后继续执行  
plt.close()  
plt.ioff()  

六、总结与进阶方向

通过本文的 Matplotlib 教程,读者已掌握了从基础绘图到高级定制的核心技能。Matplotlib 的灵活性和扩展性使其成为 Python 可视化生态的基石,但学习不应止步于此。以下是进一步探索的建议:

  1. Seaborn 库:基于 Matplotlib 的高级接口,适合快速生成统计图表。
  2. Plotly:支持交互式可视化,适合 Web 应用场景。
  3. 自定义图表类型:如热力图、等高线图等,Matplotlib 官方文档提供了丰富的案例。

记住,实践是掌握技能的最佳途径。尝试将本文中的代码示例应用于自己的数据集,逐步构建个性化图表风格。可视化不仅是技术工具,更是数据故事的讲述者——用 Matplotlib,让数据开口说话吧!

最新发布