为什么 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])
我试图同时创建 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])