Haga más de un gráfico en la misma celda de IPython Notebook

87

He iniciado mi portátil IPython con

ipython notebook --pylab inline

Este es mi código en una celda

df['korisnika'].plot()
df['osiguranika'].plot()

Esto funciona bien, dibujará dos líneas, pero en el mismo gráfico.

Me gustaría dibujar cada línea en un gráfico separado. Y sería genial si los gráficos estuvieran uno al lado del otro, no uno tras otro.

Sé que puedo poner la segunda línea en la siguiente celda y luego obtendría dos gráficos. Pero me gustaría que los gráficos estuvieran cerca unos de otros, porque representan la misma unidad lógica.

WebOrCode
fuente

Respuestas:

88

Primero haga los ejes múltiples y páselos a la función de trazado de Pandas, como:

fig, axs = plt.subplots(1,2)

df['korisnika'].plot(ax=axs[0])
df['osiguranika'].plot(ax=axs[1])

Todavía le da 1 cifra, pero con dos gráficos diferentes uno al lado del otro.

Rutger Kassies
fuente
3
Esto está funcionando. Ahora suelo cambiar el tamaño de la imagen. Puedo hacerlo con fig, axs = plt.subplots (1,2, figsize = (15, 5)). ¿Existe alguna forma de establecer el tamaño de la imagen en píxeles?
WebOrCode
1
Usar el tamaño de la figura es de hecho la forma, ese es el tamaño en pulgadas. La cantidad de píxeles que habrá depende de los ppp, que se fijan para mostrar en pantalla. Pero para guardarlo se puede configurar agregando la palabra clave dpi.
Rutger Kassies
2
No es del todo exacto que el ppp esté fijo para la visualización en pantalla (bueno, lo es y no lo es). IPython muestra imágenes basadas exclusivamente en su tamaño de píxel, y ese tamaño de píxel se determina en matplotlib multiplicando el tamaño de la figura en pulgadas por la savefig.dpiconfiguración. Las figuras en línea utilizan la misma ruta de savefig que los archivos de escritura.
minrk
Gracias por señalar eso, no sabía que funcionaba así. Sin embargo, ¿no sería más conveniente si se tuvieran en cuenta los ppp de la pantalla (también), ya que eso es fácil de configurar en la creación de la figura? Para savefig.dpi, no conozco otra forma que no sea mpl.rcParams['savefig.dpi'] = 120. Para la pantalla de dpi, hay una palabra clave en muchos lugares, como plt.figure(dpi=120), pero eso se ignora ahora, de ahí mi suposición errónea de que se corrigió.
Rutger Kassies
101

También puede llamar a la función show () después de cada gráfico. p.ej

   plt.plot(a)
   plt.show()
   plt.plot(b)
   plt.show()
Tooblippe
fuente
1
Genial, pero ¿cómo establecer la ubicación de la imagen de la trama, como (2,2) o (1,2)?
Pythoner
3
Con esta opción, las parcelas aparecen necesariamente una tras otra. Para tener más control sobre el diseño general, pyplot.subplots()es el camino a seguir.
Eric O Lebigot
1
Eliminé el enlace.
Tooblippe
12

Algo como esto:

import matplotlib.pyplot as plt
... code for plot 1 ...
plt.show()
... code for plot 2...
plt.show()

Tenga en cuenta que esto también funcionará si está utilizando el seabornpaquete para trazar:

import matplotlib.pyplot as plt
import seaborn as sns
sns.barplot(... code for plot 1 ...) # plot 1
plt.show()
sns.barplot(... code for plot 2 ...) # plot 2
plt.show()
mgoldwasser
fuente
11

Otra forma, por variedad. Aunque este es algo menos flexible que los demás. Desafortunadamente, los gráficos aparecen uno encima del otro, en lugar de uno al lado del otro, lo que solicitó en su pregunta original. Pero es muy conciso.

df.plot(subplots=True)

Si el marco de datos tiene más de las dos series, y solo desea trazar esas dos, deberá reemplazar dfcon df[['korisnika','osiguranika']].

Luciano
fuente
2

No sé si esta es una nueva funcionalidad, pero se trazará en figuras separadas:

df.plot(y='korisnika')
df.plot(y='osiguranika')

mientras que esto se trazará en la misma figura: (al igual que el código en la operación)

df.plot(y=['korisnika','osiguranika'])

Encontré esta pregunta porque estaba usando el método anterior y quería que se graficaran en la misma figura, por lo que su pregunta fue en realidad mi respuesta.

Steven
fuente