7

如何使用 matplotlib Figure 对象作为子图?具体来说,我有一个创建 matplotlib 图对象的函数,我想将其作为子图包含在另一个图中。

简而言之,这是我尝试过的精简伪代码:

    fig1 = plt.figure(1, facecolor='white')
    figa = mySeparatePlottingFunc(...)
    figb = mySeparatePlottingFunc(...)
    figc = mySeparatePlottingFunc(...)
    figd = mySeparatePlottingFunc(...)
    fig1.add_subplot(411, figure=figa)
    fig1.add_subplot(412, figure=figb)
    fig1.add_subplot(413, figure=figc)
    fig1.add_subplot(414, figure=figd)
    fig1.show()

然而,遗憾的是,这失败了。我知道从函数调用返回的各个图是可行的——我做了一个 figa.show(),...,figd.show() 来确认它们是好的。我在上面的代码块中得到的最后一行——fig1.show()——是四个空图的集合,它们有框架和 x 和 y 刻度线/标签。

我已经做了很多谷歌搜索,并进行了广泛的实验,但很明显我错过了一些非常微妙或令人尴尬的明显(只要我能,我会很高兴成为后者不卡住)。

感谢您提供的任何建议!

4

1 回答 1

6

你不能把 a 放在 afigurefigure

您应该修改绘图函数以将axes对象作为参数。

我也不清楚为什么存在 kwarg figure,我认为它是继承工作方式、文档自动生成方式以及某些 getter/setter 工作方式自动化的产物。如果你注意到,它说figureFigure文档中没有记录,所以它可能不会做你想要的;)。如果你深入一点,那个 kwarg 真正控制的是所创建的轴也被附加的​​图形,这不是你想要的。

一般来说,在人物之间移动现有的轴/艺术家并不容易,有太多的内部管道需要重新连接。我认为这是可以做到的,但会涉及到内部结构,并且不能保证它可以与未来的版本一起使用,或者如果内部结构发生变化会破坏它,你会收到警告。

您需要使用绘图函数将Axes对象作为参数。您可以使用如下模式:

def myPlotting(..., ax=None):
    if ax is None:
        # your existing figure generating code
        ax = gca()

因此,如果您传入一个Axes对象,它会被吸引到(您需要的新功能),但如果您不这样做,您的所有旧代码都会按预期工作。

于 2013-05-25T21:46:12.667 回答