17

因此,在figure添加了三个垂直子图的情况下add_subplot,我该如何选择让我们说中间那个?

现在我做这个列表理解:

[r[0] for r in sorted([[ax, ax.get_geometry()[2]] for ax in self.figure.get_axes()], key=itemgetter(1))]

我可以简单地选择我想要的索引,并使用相应的axes. 有没有更直接的方法来做到这一点?

4

1 回答 1

16

matplotlib 文档

如果该图已经有一个带有键 (args, kwargs) 的子图,那么它将简单地将该子图设为当前并返回它。

这是一个例子:

import matplotlib.pyplot as plt

fig = plt.figure()  
for vplot in [1,2,3]:
    ax = fig.add_subplot(3,1,vplot)
    ax.plot(range(10),range(10))

ax_again = fig.add_subplot(3,1,2)
ax_again.annotate("The middle one",xy=(7,5),xytext=(7,5))

plt.show()

再次调用中间图以便对其进行注释。

如果我用原来的调用设置了背景,我第二次得到子图时是否需要再次设置它?

是的。原始调用的参数和关键字用于制作唯一标识符。因此,要让图形再次生成此唯一标识符,您需要再次传递相同的参数(网格定义、位置)和关键字。例如:

import matplotlib.pyplot as plt

fig = plt.figure()  
ax = fig.add_subplot(2,1,1,axisbg='red')
ax.plot(range(10),range(10))
ax = fig.add_subplot(2,1,2)
ax.plot(range(10),range(10))

ax_again = fig.add_subplot(2,1,1,axisbg='red')
ax_again.annotate("The top one",xy=(7,5),xytext=(7,5))

plt.show()

如果我使用 ax_again.change_geometry() 怎么办?

您会认为 change_geometry,例如从 312 到 422,会改变您使用 add_subplot 的方式,但事实并非如此。调用 change_geometry 时似乎存在错误或未定义的行为。最初使用参数和关键字生成的唯一键不会更新到第一个 add_subplot 调用。因此,如果您想通过 add_subplot 调用获取轴,则需要使用原始参数和关键字调用 add_subplot。有关更多信息,请关注此问题报告: https ://github.com/matplotlib/matplotlib/issues/429

我现在的猜测是,如果在使用 add_subplot 调用生成子图后更改子图的任何属性,则不会调整唯一性。因此,只需使用原始参数和关键字,希望这会奏效。

于 2011-08-18T02:49:46.450 回答