Cómo trazar múltiples marcos de datos en subtramas
Tengo algunos Pandas DataFrames que comparten la misma escala de valores, pero tienen diferentes columnas e índices. Al invocar df.plot()
, obtengo imágenes de trama separadas. Lo que realmente quiero es tenerlos todos en la misma trama como subtramas, pero desafortunadamente no logro encontrar una solución y agradecería mucho un poco de ayuda.
Puede crear manualmente las subtramas con matplotlib y luego trazar los marcos de datos en una subtrama específica usando la ax
palabra clave. Por ejemplo para 4 subtramas (2x2):
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=2)
df1.plot(ax=axes[0,0])
df2.plot(ax=axes[0,1])
...
Aquí axes
hay una matriz que contiene los diferentes ejes de la subtrama, y puede acceder a una simplemente indexando axes
.
Si desea un eje x compartido, puede sharex=True
proporcionarlo plt.subplots
.
Puedes ver p.e. en la documentación que demuestra la respuesta de joris. Además, desde la documentación, también puedes configurar subplots=True
y dentro de la función layout=(,)
pandas :plot
df.plot(subplots=True, layout=(1,2))
También puede usar fig.add_subplot()
el cual toma parámetros de cuadrícula de subtrama como 221, 222, 223, 224, etc., como se describe en la publicación aquí . En este cuaderno de ipython se pueden ver buenos ejemplos de tramas en el marco de datos de pandas, incluidas subtramas .
Puede trazar múltiples subtramas de múltiples marcos de datos de pandas usando matplotlib con un simple truco de hacer una lista de todos los marcos de datos. Luego, use el bucle for para trazar subtramas.
Código de trabajo:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# dataframe sample data
df1 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
df2 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
df3 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
df4 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
df5 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
df6 = pd.DataFrame(np.random.rand(10,2)*100, columns=['A', 'B'])
#define number of rows and columns for subplots
nrow=3
ncol=2
# make a list of all dataframes
df_list = [df1 ,df2, df3, df4, df5, df6]
fig, axes = plt.subplots(nrow, ncol)
# plot counter
count=0
for r in range(nrow):
for c in range(ncol):
df_list[count].plot(ax=axes[r,c])
count+=1
Con este código puede trazar subtramas en cualquier configuración. Debe definir el número de filas nrow
y el número de columnas ncol
. Además, debe hacer una lista de los marcos de datos df_list
que desea trazar.