在matplotlib中创建两个完全独立的图,并在它们之间来回走动



我想在python脚本中创建两个独立的matplotlib图,并且在我添加行,注释等时可能会在它们之间来回跳动(例如),也许我调用一个函数,该函数将行添加到两个图上,然后添加注释的另一个函数)。

我希望通过解决matplotlib的示例,我可以找出一些有效的解决方案,但是我想知道哪种偏爱和最清洁的方法是什么。我倾向于感到困惑,何时应该做

之类的事情
fig,ax=plt.subplots()

当我应该做以下事情时:

fig=plt.figure()

此外,我应该如何在图之间来回切换。如果我做了

之类的事情
fig1,ax1=plt.subplots()
fig2,ax2=plt.subplots()

我可以通过执行以下操作来参考这些图:

ax1.plt.plot([some stuff])
ax2.plt.plot([otherstuff]

?我之所

plt.plot([stuff])

据推测,他们没有指定AX1或AX2,因为示例中只有一个图。最后,我想保存两个图以使用

之类的东西提交。
plt.savefig(....)

尽管我再次需要能够独立参考这两个图。那么,实施此操作的适当是什么?

如果您想能够编写明确应用命令到不同轴的代码,则要使用面向对象的接口。

实际上,您的前两个示例中的两个都使用此接口。区别在于plt.subplots()将同时创建一个图对象和轴网格,而plt.figure()只是创建图形。

图对象具有在其中创建轴的方法。因此,这两个代码块是等效的:

fig, ax = plt.subplots()

fig = plt.figure()
ax = fig.add_subplot(111)

通常,只有当您想要不遵循常规网格的图中的多个轴时,后一种方法才会更有用。因此,您可以做:

fig = plt.figure()
ax = fig.add_axes([.1, .1, .2, .8])

将在图的左侧添加一个高轴对象。


接下来,如何获得多个轴绘制?

subplots函数采用两个位置参数,指定网格中的行和列数(默认为 (1, 1)

fig, axes = plt.subplots(1, 2)

现在axes将成为一个填充轴对象的(1, 2)对象数组。对于小网格来说,使用Python的元组拆开并直接引用对象通常更方便:

fig, (ax1, ax2) = plt.subplots(1, 2)

现在,您如何处理这些对象,它们与MATLAB风格的过程之间的关系是什么?

pyplot名称空间中的大多数功能也作为图或轴对象上的方法存在。Matplotlib(和Matlab)具有"电流"图和轴的概念。当您调用像plt.plot这样的函数时,它会在当前轴上绘制(通常是最近创建的轴)。当您调用plt.savefig之类的函数时,它保存了当前图。

对于简单的任务,这比使用面向对象的接口更为直接,通常更容易。但是,当您开始制作更复杂的地块时,例如一个轴网格,每个网格都有多层(也许是散点图和回归线),能够围绕您在做什么做具有很大的优势。通常,绘制以对象为导向方式编写的代码将比以过程方式编写的代码更好。

最新更新