这个问题在这里已经有了答案:
Embed matplotlib figure in larger figure
(1 个回答)
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 刻度线/标签的四个空图的集合。
我已经做了很多谷歌搜索,并进行了广泛的实验,但很明显我错过了一些非常微妙或令人尴尬的明显(只要我能,我会很高兴成为后者不卡住)。
感谢您提供的任何建议!
最佳答案
你不能把 figure
在 figure
.
您应该修改您的绘图函数以采用 axes
对象作为论据。
我也不清楚为什么 kwarg figure
在那里,我认为它是继承工作方式、文档自动生成方式以及某些 getter/setter 工作方式自动化的产物。如果你注意到,它会说 figure
未记录在 Figure
中文档,因此它可能无法满足您的要求;)。如果你深入一点,那个 kwarg 真正控制的是所创建的轴也被附加的图形,这不是你想要的。
一般来说,在人物之间移动现有的轴/艺术家并不容易,有太多的内部管道需要重新连接。我认为这是可以做到的,但会涉及到内部结构,并且不能保证它会与 future 的版本一起使用,或者如果内部结构发生变化会破坏它,你会收到警告。
你需要你的绘图函数来获取 Axes
对象作为论据。您可以使用如下模式:
def myPlotting(..., ax=None):
if ax is None:
# your existing figure generating code
ax = gca()
所以如果你传入
Axes
它被吸引到对象(您需要的新功能),但如果您不这样做,所有旧代码都将按预期工作。
关于matplotlib - 如何将 matplotlib Figure 对象包含为子图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16750333/