2013-01-18 3 views
7

Ho creato un software per fare analisi del segnale. Ci sono più funzioni, e ciascuna mostra infine una figura complessa contenente etichette, trama, axhspan, axvspan ecc ... Di solito, queste funzioni sono chiamate individualmente. Tutte le mie funzioni restituiscono un oggetto figura, che posso salvare in pdf per esempio.Come posso organizzare più figure di Pyplot in un tipo di layout?

def Myfunction1(self): 
    fig = pyplot.figure() 
    ...do somestuff, create my figure 
    pyplot.show() 
    fig.savefig('C:\MyFigurefolder\figure1.pdf', dpi=300) 
    return fig 

def Myfunction2(self): 
    fig = pyplot.figure() 
    ...do some other stuff, create my 2nd figure 
    pyplot.show() 
    fig.savefig('C:\MyFigurefolder\figure2.pdf', dpi=300) 
    return fig 

Ora, vorrei creare una sorta di "figura di sintesi", facendo una meta-analisi, e di unire le molteplici figure insieme, e salvandoli in un PDF finale. Non so davvero come dovrei farlo. C'è un modo per usare oggetti figura intera, (o forse il multiplo pdf individuale) per fare la mia figura?

Qualcosa di simile:

def FinalFigure(self): 

    final = A_Kind_Of_Layout_Or_A_Figure_or_something 

    a=self.Myfunction1() 
    b=self.Myfunction2() 

    Action_to_arrange_a_and_b_like_gridspec 

    final.savefig('C:\MyFigurefolder\FinalFigure.pdf', dpi=300) 
+0

Would [questa soluzione] (http://stackoverflow.com/a/11172032/1984421) lavoro per voi? –

risposta

9

È possibile combinare diversi appezzamenti con matplotlib.pyplot.subplot. Per un maggiore controllo sul layout, controlla lo GridSpec.

Edit: Come richiesto, un breve esempio dal tutorial collegato:

Un esempio gridspec fornisce array simile (2d o 1d) indicizzazione che restituisce l'istanza SubplotSpec. Per, SubplotSpec che si estende su più celle, utilizzare slice.

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 
gs = gridspec.GridSpec(3, 3) 
ax1 = plt.subplot(gs[0, :]) 
ax2 = plt.subplot(gs[1,:-1]) 
ax3 = plt.subplot(gs[1:, -1]) 
ax4 = plt.subplot(gs[-1,0]) 
ax5 = plt.subplot(gs[-1,-2]) 

enter image description here

+2

Per chi legge questo: se preferisci l'approccio ** orientato agli oggetti come faccio io, puoi usare 'ax1 = fig.add_subplot (gs [0,:])', ecc. –

Problemi correlati