如何将matplotlibgraphics对象包含在子图中?

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

我做了相当多的search,并进行了广泛的尝试,但很显然,我已经错过了一些非常微妙或者显而易见的事情(只要我可以,我会很高兴它成为后者得到不卡住)。

感谢您提供的任何build议!

你不能把figure放在一个figure

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

我也不清楚为什么kwarg的figure在那里,我认为这是inheritance的工作方式,文档自动生成的方式,以及某些getter / setter工作的自动化方式的人为因素。 如果你注意到,它说figureFigure文档中没有记载,所以它可能不会做你想要的;)。 如果你挖了一下,那么kwarg真正控制的是创build的坐标轴被连接的数字,这不是你想要的。

一般来说,将现有的轴/艺术家在graphics之间移动并不容易,需要重新连接的内部pipe道太多。 我认为这是可以做到的,但会触及内部,并不能保证它能与未来的版本一起工作,或者如果内部的改变将会破坏它,你会得到警告。

你需要你的绘图函数来把一个Axes对象作为参数。 您可以使用如下模式:

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

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