¿Cómo incluyo un objeto Matplotlib Figure como subplot?

¿Cómo puedo usar un objeto Matplotlib Figure como subttwig? Específicamente, tengo una función que crea un objeto Matplotlib Figure, y me gustaría incluir esto como una subttwig en otra figura.

En resumen, aquí está el pseudocódigo simplificado para lo que he intentado:

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() 

Tristemente, sin embargo, esto falla. Sé con certeza que las ttwigs individuales devueltas de las invocaciones de función son viables, hice un figa.show (), …, figd.show () para confirmar que están bien. Lo que obtengo para la última línea en el código anterior block–fig1.show () – es una colección de cuatro gráficos vacíos que tienen marcos y x- y y- marcas / tags.

He estado haciendo un poco de búsqueda de Google y experimentado mucho, pero está claro que me he perdido algo que es muy sutil o vergonzosamente obvio (me alegra que sea el último tanto como pueda). desanudarse).

Gracias por cualquier consejo que pueda ofrecer!

No puedes poner una figure en una figure .

Debe modificar sus funciones de trazado para tomar objetos de axes como argumento.

Tampoco estoy claro por qué la figure kwarg está allí, creo que es un artefacto de la forma en que funciona la herencia, la forma en que la documentación se genera automáticamente y la forma en que parte del trabajo getter / setter es automático. Si nota, dice que la figure no está documentada en la documentación de la Figure , por lo que es posible que no haga lo que desea;). Si cavas un poco, lo que ese kwarg realmente controla es la figura que los ejes creados también están unidos, que no es lo que quieres.

En general, mover ejes / artistas existentes entre figuras no es fácil, hay demasiados trozos de plomería interna que deben volver a conectarse. Creo que se puede hacer, pero implicará tocar las partes internas y no hay garantía de que funcione con versiones futuras o de que recibirá una advertencia si las partes internas cambian de una manera que la rompa.

Necesitas tus funciones de trazado para tomar un objeto Axes como argumento. Puedes usar un patrón como:

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

así que si pasas un objeto Axes se sentirá atraído por (la nueva funcionalidad que necesitas), pero si no lo haces, todo tu código antiguo funcionará como se esperaba.