如何将matplotlib图对象包含为子图?

时间:2013-05-25 14:04:15

标签: matplotlib

如何使用matplotlib图对象作为子图?具体来说,我有一个创建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-标记/标签。

我已经做了很多谷歌搜索,并进行了广泛的实验,但很明显我错过了一些非常微妙或令人尴尬明显的东西(我会很高兴它成为后者的长期因为我可以不被困住。)

感谢您提供任何建议!

1 个答案:

答案 0 :(得分:3)

您无法将figure放入figure

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

我也不清楚为什么kwarg figure存在,我认为它是继承工作方式的工件,文档自动生成的方式,以及一些getter / setter的方式工作是自动化的。如果您注意到,它会在figure文档中显示Figure未记录,因此它可能无法执行您想要的操作;)。如果你向下挖掘一下,那个kwarg真正控制的是创建的轴也附着的图形,这不是你想要的。

一般来说,在数字之间移动现有的轴/艺术家并不容易,需要重新连接太多的内部管道。我认为它可以完成,但是涉及触及内部并且无法保证它将适用于未来的版本,或者如果内部以一种破坏它的方式改变,你将得到警告。

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

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

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