Matplotlib 面向对象接口怎么用?

文章导读
Previous Quiz Next Matplotlib 中的 面向对象接口 是一种创建图表的途径,它涉及显式创建和操作代表图表不同元素的对象。在此上下文中,接口 指的是库提供的用于创建可视化的不同编程方法或风格。
📋 目录
  1. A Matplotlib 中的接口
  2. B 函数式接口 (Pyplot)
  3. C 面向对象接口
  4. D 使用面向对象接口
  5. E 在 OO 接口中创建子图
A A

Matplotlib - 面向对象接口



Previous
Quiz
Next

Matplotlib 中的 面向对象接口 是一种创建图表的途径,它涉及显式创建和操作代表图表不同元素的对象。在此上下文中,接口 指的是库提供的用于创建可视化的不同编程方法或风格。

Matplotlib 中的接口

Matplotlib 提供了两种主要方法来创建图表 —

  • 函数式接口(也称为隐式或 pyplot 接口)和
  • 面向对象接口(称为显式或 Axes 接口)。

函数式接口 (Pyplot)

函数式接口,也称为 pyplot 接口,是一种隐式且基于状态的方法。它跟踪最近创建的 Figure 和 Axes,并隐式地将 artists 添加到对象中,因为它假设用户需要该 artist。此接口适合快速生成和修改图表,但对于复杂图表可能缺乏可扩展性。

示例 - 创建图表

以下是一个使用隐式 “pyplot” 接口创建图表的简单示例。

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [0, 0.5, 1, 0.2])
plt.show()

输出

执行上述代码后,您将得到以下输出 —

object_oriented_interface_ex1

面向对象接口

另一方面,面向对象接口提供了对 Figure 和 Axes 对象创建的显式控制。它涉及创建这些对象的实例,并逐步调用它们的方法来构建可视化。这种方法更具结构化,推荐用于复杂和多图表场景。

使用更正式的面向对象方法的要点是创建 figure 对象,然后直接在其上调用方法或属性。这种方法有助于更好地处理包含多个图表的画布。

在面向对象接口中,Pyplot 仅用于少数函数,如 figure 创建,用户显式创建并跟踪 figure 和 axes 对象。在此级别,用户使用 Pyplot 创建 figures,并通过这些 figures 创建一个或多个 axes 对象。这些 axes 对象随后用于大多数绘图操作。

示例 - 面向对象接口

此示例使用面向对象接口创建一个简单图表。

import matplotlib.pyplot as plt

# 创建一个 Figure 实例
fig = plt.figure()

# 使用 subplots 方法创建 Axes 对象
ax = fig.subplots()

# 绘制数据
ax.plot([1, 2, 3, 4], [0, 0.5, 1, 0.2])

# 显示图表
plt.show()

输出

执行上述代码后,您将得到以下输出 —

object_oriented_interface_ex2

两种接口的区别

从上述两个示例中,您可以观察到两种方法的区别。函数式方法使用 plt.plot() 函数,该函数属于 matplotlib.pyplot 家族。

而 ax.plot() 函数是所有 Figure 对象可用的方法,具体来说是 Axes 方法。这遵循面向对象方法,其中创建一个 Figure 对象,并显式引用和使用 Axes 对象来逐步构建图表。

使用面向对象接口

在这种方法中,图表被构建为一个 Figure 对象,它充当画布,而 artists 是构成最终图形图像的元素。Axes 类表示单个图表,一个 Figure 可以包含多个 Axes 对象。

示例 - 创建 Figure 和 Axes 对象

在这个示例中,我们显式创建一个 Figure 和一个 Axes 对象,为自定义和构建复杂可视化提供基础。

import matplotlib.pyplot as plt
import numpy as np

# 示例数据
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)

# 创建 Figure 实例
fig, ax = plt.subplots(figsize=(7,4))

# 绘制数据
ax.plot(x, y)

# 自定义图表
ax.set_title("Sine Wave")
ax.set_xlabel('x_label')
ax.set_ylabel('y_label')

# 显示图表
plt.show()

输出

执行上述代码后,您将得到以下输出 −

object_oriented_interface_ex3

在 OO 接口中创建子图

要在面向对象接口中创建子图,我们显式创建 FigureAxes 对象,从而对布局和自定义获得更多控制。

示例 - 使用 OO 接口创建子图

以下示例使用面向对象接口创建子图。

import matplotlib.pyplot as plt
import numpy as np

# 示例数据
x = np.linspace(0, 2 * np.pi, 400)
y1 = np.sin(x**2)
y2 = np.cos(x**2)

# 创建子图
fig, axs = plt.subplots(2, figsize=(7,4))
fig.suptitle('Creating Subplots in explicit interface')

# 在各个子图上绘制数据
axs[0].plot(x, y1)
axs[1].plot(x, y2)

# 为子图添加标题
axs[0].set_title('Sin Plot')
axs[1].set_title('Cos Plot')

# 调整布局
plt.tight_layout()

# 显示图表
plt.show()

输出

执行上述代码后,您将得到以下输出 −

object_oriented_interface_ex4