命令式与面向对象的语法

Matplotlib 支持用于绘图的面向对象和命令式语法。命令式语法有意设计为非常接近 Matlab 语法。

命令式语法(有时称为状态机语法)发出一串命令,所有这些命令都作用于最新的图形或轴(如 Matlab)。另一方面,面向对象的语法明确地作用于感兴趣的对象(图形,轴等)。 Python禅宗中的一个关键点是显式优于隐式,因此面向对象的语法更加 pythonic。但是,命令式语法对于 Matlab 的新转换和编写小型一次性绘图脚本非常方便。以下是两种不同风格的示例。

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0, 2, 0.01)
y = np.sin(4 * np.pi * t)

# Imperative syntax
plt.figure(1)
plt.clf()
plt.plot(t, y)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude (V)')
plt.title('Sine Wave')
plt.grid(True)

# Object oriented syntax
fig = plt.figure(2)
fig.clf()
ax = fig.add_subplot(1,1,1)
ax.plot(t, y)
ax.set_xlabel('Time (s)')
ax.set_ylabel('Amplitude (V)')
ax.set_title('Sine Wave')
ax.grid(True)

两个例子都产生了相同的图,如下所示。

StackOverflow 文档