2010-02-15 16 views
22

Me gustaría tener tres tramas en una sola figura. La figura debe tener un diseño de subparcela de dos en dos, donde el primer gráfico debe ocupar las dos primeras celdas de subtrama (es decir, toda la primera fila de celdas de la trama) y las otras tramas deben colocarse debajo del primero en las celdas 3 y 4. sé que MATLAB permite esto usando el comando trama secundaria al igual queCómo hacer que un eje ocupe varias subtramas con pyplot (Python)

subplot(2,2,[1,2]) % the plot will span subplots 1 and 2 

¿es también posible en pyplot tener un único ejes ocupan más de una trama secundaria? El docstring de pyplot.subplot no habla de eso.

¿Alguien tiene una solución fácil? Gracias de antemano

+0

duplicado Posible de http://stackoverflow.com/questions/1358977/how-to-make-several-plots-on-a-single-page-using-matplotlib – cyborg

Respuesta

31

puede simplemente hacer:

x = numpy.arange(0, 7, 0.01) 

subplot(2, 1, 1) 
plot(x, sin(x)) 

subplot(2, 2, 3) 
plot(x, cos(x)) 

subplot(2, 2, 4) 
plot(x, sin(x)*cos(x)) 

es decir, la primera parcela es realmente una parcela en la mitad superior (la figura única se divide en 2 * 1 = 2 células), y el después de hacer dos parcelas más pequeñas en una cuadrícula de 2 * 2 = 4 celdas. El tercer argumento para subplot() es la posición del gráfico dentro de la cuadrícula: por ejemplo en la segunda subparcela(), los ejes irán a la tercera sección de la matriz 2 * 2, es decir, a la esquina inferior izquierda.

+5

Mientras que esto responde a la específica ejemplo dado en la pregunta, no está claro cómo esto se aplica a diseños que no son potencias de 2. Para mi código, me gustaría dividir el diseño en tres partes. Una trama para llenar los 2 tercios correctos y otra trama que llena un tercio izquierdo. – Annan

+1

Esta respuesta se aplica realmente a diseños regulares (sin restricción de "potencia de 2"): 'subtrama (3, 1, 1)', por ejemplo, cortes en tercios. Ahora, lo que quiere es manejado por el kit de herramientas [axes_grid] (http://matplotlib.org/gallery.html#axes_grid). – EOL

+1

@EOL, estoy pensando en 2 tercios, no 1 tercios. Por ejemplo, tengo dos subtramas, con solo 1 columna, el 1er tramo 2/3, el segundo tramo 1/3. ¿Como se puede hacer esto? Gracias. – StayFoolish

17

tener múltiples subtramas con un eje ocupan, sólo tiene que hacer:

from matplotlib import pyplot as plt 
import numpy as np 

b=np.linspace(-np.pi, np.pi, 100) 

a1=np.sin(b) 

a2=np.cos(b) 

a3=a1*a2 

plt.subplot(221) 
plt.plot(b, a1) 
plt.title('sin(x)') 

plt.subplot(222) 
plt.plot(b, a2) 
plt.title('cos(x)') 

plt.subplot(212) 
plt.plot(b, a3) 
plt.title('sin(x)*cos(x)') 

plt.show() 

enter image description here

Otra forma es

plt.subplot(222) 
plt.plot(b, a1) 
plt.title('sin(x)') 

plt.subplot(224) 
plt.plot(b, a2) 
plt.title('cos(x)') 

plt.subplot(121) 
plt.plot(b, a3) 
plt.title('sin(x)*cos(x)') 

plt.show() 

enter image description here

5

Para un control más preciso es posible que desee utilizar el subplot2grid módulo de matplotlib.pyplot.

http://matplotlib.org/users/gridspec.html

+1

muy bien, no sabía de esto, es exactamente lo que necesito, especialmente las características colspan y rowspan. – mxmlnkn

Cuestiones relacionadas