2012-06-05 14 views
6

tengo el problema, que la trama secundaria matplotlib me confunde. No sé el número de subtramas que quiero trazar de antemano, pero sé que las quiero en dos filas. entonces no puedo usar elG. múltiple con matplotlib sin conocer el número de parcelas antes de ejecutar

plt.subplot(212) 

porque no sé el número que debo proporcionar.

Se debe tener este aspecto:

example for plot

en este momento I trazar todas las parcelas en una carpeta y ponerlos juntos con el ilustrador, pero tiene que haber una mejor manera con matplotlib. Puedo proporcionar mi código si no estaba claro en alguna parte.

+0

una forma de bricolaje sería el uso de 'axes.set_position()' http://stackoverflow.com/questions/10881520/alignment-of-stacked-subplots/10881881#10881881 –

+1

¿Quiere decir que ¿no sabe el número de parcelas hasta el tiempo de ejecución, o hasta que ya haya comenzado a procesar algunas parcelas? Si es el primero, puede usar la sintaxis explícita: 'plt.subplot (2, n_rows, 2)' donde n_rows sería su número de parcelas/2. – pelson

+0

¿Puede poner esto como una respuesta? lo aceptaré – tarrasch

Respuesta

7

Mi entendimiento es que sólo se conoce el número de parcelas en tiempo de ejecución y por lo tanto está luchando con la sintaxis abreviada, por ejemplo:

plt.subplot(121) 

Afortunadamente, para evitar que tenga que hacer algunos cálculos difícil de averiguar esto número programáticamente, hay otra interfaz que permite el uso de la forma:

plt.subplot(n_cols, n_rows, plot_num) 

Así, en su caso, teniendo en cuenta que desea n parcelas, que puede hacer:

n_plots = 5 # (or however many you programatically figure out you need) 
n_cols = 2 
n_rows = (n_plots + 1) // n_cols 
for plot_num in range(n_plots): 
    ax = plt.subplot(n_cols, n_rows, plot_num) 
    # ... do some plotting 

Por otra parte, también hay una interfaz un poco más Pythonic la que es posible que desee tener en cuenta:

fig, subplots = plt.subplots(n_cols, n_rows) 
for ax in subplots: 
    # ... do some plotting 

(Tenga en cuenta que esto era subplots() no la llanura subplot()). Aunque debo admitir que nunca he usado esta última interfaz.

HTH

Cuestiones relacionadas