Python Matplotlib绘图从零到精通 – wiki词典

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 官方文档以发现更多高级功能。祝您绘图愉快!

滚动至顶部