为什么 pylab 总是绘制到最后创建的图形?

Why does pylab always plot to the last created figure?

我试图同时创建 2 个数字。我以为我可以通过指定所需的轴来绘制每个图形,如下面的代码所示,但所有数据都进入了最后创建的图形(此处,fig2)。

import matplotlib.pylab as pl

fig1 = pl.figure(figsize=(5, 5))
gs1 = pl.GridSpec(4, 4)

fig2 = pl.figure(figsize=(5, 5))
gs2 = pl.GridSpec(4, 4)

for axis_counter in range(11):
    ax = pl.subplot(gs1[axis_counter])
    ax.plot([0, 10], [0, 10])

当我 运行 在 fig1 轴上没有绘制任何东西时,它全部进入 fig2 轴,即使我在这里明确调用 gs1 也是如此。我想 pylab 正在锁定最后创建的图形,但这种行为没有意义。

我的建议是永远不要使用 pylab。

如果您在交互式控制台会话中,pyplot 没问题。但实际上,您应该使用 object-oriented 接口。这意味着:

  • 正在导入 pyplot
  • 直接创建图形或通过 (pyplot.subplots)
  • 使用坐标轴创建图形
  • 直接对这些图形和坐标轴进行操作。

在您的情况下,这意味着:

from matplotlib import pyplot

fig1 = pyplot.figure(figsize=(5, 5))
gs1 = fig1.add_gridspec(4, 4)

fig2 = pyplot.figure(figsize=(5, 5))
gs2 = fig2.add_gridspec(3, 3)

for axis_counter in range(11):
    ax = fig1.add_subplot(gs1[axis_counter])
    ax.plot([0, 10], [0, 10])


ax = fig2.add_subplot(gs2[3])
ax.plot([0, 10], [0, 10])