¿Cómo hacer dos gráficos uno al lado del otro usando Python?


94

Encontré el siguiente ejemplo en matplotlib:

import numpy as np
import matplotlib.pyplot as plt


x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'ko-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')


plt.subplot(2, 1, 2)
plt.plot(x2, y2, 'r.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')

plt.show()

Mi pregunta es: ¿Qué necesito cambiar para tener las parcelas una al lado de la otra?

Respuestas:


148

Cambie la configuración de su subtrama a:

plt.subplot(1, 2, 1)

...

plt.subplot(1, 2, 2)

Los parámetros para subplotson: número de filas, número de columnas y en qué subparcela se encuentra actualmente. Por 1, 2, 1lo tanto, significa "una figura de 1 fila y 2 columnas: vaya a la primera subtrama". Luego 1, 2, 2significa "una figura de 1 fila y 2 columnas: ve a la segunda subtrama".

Actualmente, solicita un diseño de 2 filas y 1 columna (es decir, una encima de la otra). En su lugar, debe solicitar un diseño de 1 fila y 2 columnas. Cuando lo haga, el resultado será:

parcela lado a lado

Para minimizar la superposición de subtramas, es posible que desee iniciar un:

plt.tight_layout()

antes del show. Flexible:

trama de lado a lado más ordenada


45

Consulte esta página: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplotses similar. Creo que es mejor porque es más fácil configurar los parámetros de la figura. Los primeros dos argumentos definen el diseño (en su caso, 1 fila, 2 columnas) y otros parámetros cambian características como el tamaño de la figura:

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(5, 3))
axes[0].plot(x1, y1)
axes[1].plot(x2, y2)
fig.tight_layout()

ingrese la descripción de la imagen aquí


1
¿Existe también una forma de hacer que la trama sea más amplia y más alta?
Heißenberg93

No me refiero al elogio plt.xlim / ylim
Heißenberg93

5
Sugeriría usar plt.subplots. Puede especificar el argumento figsizepara definir el tamaño de la figura. Como en plt.subplots(1, 2, figsize=(20, 4)). De lo contrario, se podría definir en primer lugar la figura de tamaño y figura: plt.figure(figsize=(20, 4)).
busybear

Por alguna razón, obtengo datos en blanco cuando intento guardar "plt.savefig ('.... png')" en la trama secundaria. Estoy usando exactamente el mismo código al principio (solo agregué plt.figure (figsize = (7, 3))).
Heißenberg93

¿Estás llamando plt.savefigdespués plt.show? Si es así, probablemente ese sea su problema.
busybear
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.