Python Matplotlib绘图从零到精通
导言
Matplotlib 是 Python 中最流行的数据可视化库之一。它提供了一个广泛的绘图工具集,用于创建各种静态、动态和交互式的图表。无论您是数据科学家、工程师还是研究人员,掌握 Matplotlib 都将是您数据可视化之旅中的一项关键技能。
本文将带您从零开始,逐步深入,最终掌握 Matplotlib 的核心功能和高级技巧。
1. 安装 Matplotlib
在开始之前,您需要安装 Matplotlib。如果您已经安装了 Python 和 pip,可以在终端或命令提示符中运行以下命令:
bash
pip install matplotlib
2. Matplotlib 基础绘图
让我们从一个简单的折线图开始。
2.1 创建第一个图表
创建一个 Python 文件(例如 simple_plot.py),并输入以下代码:
“`python
import matplotlib.pyplot as plt
import numpy as np
准备数据
x = np.linspace(0, 10, 100) # 生成一个从 0 到 10 包含 100 个点的数组
y = np.sin(x)
创建图表
plt.plot(x, y)
添加标题和标签
plt.title(“Simple Sine Wave”)
plt.xlabel(“X-axis”)
plt.ylabel(“Y-axis”)
显示图表
plt.show()
“`
运行此脚本 (python simple_plot.py),您将看到一个包含正弦波的窗口。
matplotlib.pyplot:是 Matplotlib 的一个模块,提供了类似 MATLAB 的绘图接口。plt.plot(x, y):是创建折线图的核心函数。plt.title(),plt.xlabel(),plt.ylabel():用于设置图表的标题和坐标轴标签。plt.show():显示图表。
2.2 散点图
散点图用于展示两个变量之间的关系。
“`python
import matplotlib.pyplot as plt
import numpy as np
准备数据
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50)
创建散点图
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5)
显示图表
plt.show()
“`
plt.scatter():创建散点图。c:设置点的颜色。s:设置点的大小。alpha:设置点的透明度。
2.3 条形图
条形图常用于比较不同类别的数据。
“`python
import matplotlib.pyplot as plt
准备数据
categories = [‘A’, ‘B’, ‘C’, ‘D’]
values = [25, 40, 30, 55]
创建条形图
plt.bar(categories, values)
显示图表
plt.show()
“`
plt.bar():创建垂直条形图。对于水平条形图,可以使用plt.barh()。
3. 自定义图表
一个清晰的图表离不开良好的自定义。
3.1 颜色、线型和标记
“`python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
自定义绘制
plt.plot(x, y1, color=’red’, linestyle=’–‘, marker=’o’, label=’sin(x)’)
plt.plot(x, y2, color=’blue’, linestyle=’-.’, marker=’x’, label=’cos(x)’)
添加图例
plt.legend()
显示图表
plt.show()
“`
color:可以是颜色名称(’red’)、十六进制码(’#FF0000’)等。linestyle:可以是'--','-.',':','-'等。marker:可以是'o','x','+','.'等。plt.legend():显示图例,需要plot函数中有label参数。
3.2 坐标轴范围和刻度
“`python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
设置坐标轴范围
plt.xlim(0, 5)
plt.ylim(-1.5, 1.5)
设置坐标轴刻度
plt.xticks(np.arange(0, 5.1, 1))
plt.yticks([-1, 0, 1])
plt.show()
“`
plt.xlim()/plt.ylim():设置 X/Y 轴的显示范围。plt.xticks()/plt.yticks():设置 X/Y 轴的刻度值。
4. 面向对象 API:Figure 和 Axes
除了 pyplot 接口,Matplotlib 还提供了更灵活的面向对象 API。这是推荐用于复杂图表和应用集成的方式。
- Figure:整个图表窗口。
- Axes:图表中的一个绘图区域(子图)。一个 Figure 可以包含多个 Axes。
“`python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
创建一个 Figure 和一个 Axes
fig, ax = plt.subplots()
在 Axes 上绘图
ax.plot(x, y)
使用 set_ 方法设置属性
ax.set_title(“Sine Wave (Object-Oriented)”)
ax.set_xlabel(“X-axis”)
ax.set_ylabel(“Y-axis”)
显示图表
plt.show()
“`
创建多个子图
plt.subplots() 是创建多个子图的便捷方法。
“`python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
创建一个 2×2 的子图网格
fig, axes = plt.subplots(nrows=2, ncols=2)
axes[0, 0].plot(x, y1)
axes[0, 0].set_title(‘sin(x)’)
axes[0, 1].plot(x, y2)
axes[0, 1].set_title(‘cos(x)’)
axes[1, 0].plot(x, y3)
axes[1, 0].set_title(‘tan(x)’)
axes[1, 0].set_ylim(-5, 5) # 限制 tan(x) 的 y 轴范围
隐藏最后一个子图
axes[1, 1].axis(‘off’)
调整子图布局
plt.tight_layout()
plt.show()
“`
5. 高级图表类型
5.1 直方图
直方图用于显示数据的分布。
“`python
import matplotlib.pyplot as plt
import numpy as np
生成随机数据
data = np.random.randn(1000)
创建直方图
plt.hist(data, bins=30, edgecolor=’black’)
plt.title(“Histogram of a Normal Distribution”)
plt.show()
``bins`:指定了箱子的数量。
-
5.2 热力图
热力图用颜色深浅来表示数值大小。
“`python
import matplotlib.pyplot as plt
import numpy as np
生成数据
matrix = np.random.rand(10, 10)
创建热力图
plt.imshow(matrix, cmap=’hot’, interpolation=’nearest’)
添加颜色条
plt.colorbar()
plt.title(“Heatmap”)
plt.show()
``cmap`:颜色映射方案,如 ‘hot’, ‘viridis’, ‘coolwarm’ 等。
-
6. 3D 绘图
Matplotlib 也支持 3D 绘图。
“`python
import matplotlib.pyplot as plt
import numpy as np
创建 3D Axes
fig = plt.figure()
ax = fig.add_subplot(111, projection=’3d’)
准备数据
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
绘制 3D 折线图
ax.plot(x, y, z, label=’3D Spiral’)
ax.legend()
plt.show()
“`
7. 保存图表
使用 plt.savefig() 可以将图表保存为文件。
“`python
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [4, 5, 1])
保存图表
dpi 参数控制分辨率
plt.savefig(‘my_plot.png’, dpi=300)
“`
支持的格式包括 PNG, JPG, PDF, SVG 等。
8. 总结
我们已经涵盖了 Matplotlib 的基础知识、自定义选项、面向对象的 API、多种图表类型以及如何保存图表。这为您探索更复杂的数据可视化奠定了坚实的基础。
要成为真正的专家,最好的方法是不断实践。尝试使用您自己的数据来创建图表,并探索 Matplotlib 官方文档以发现更多高级功能。祝您绘图愉快!