pandas puede dividir las columnas de un data frame en varios subplots con un solo argumento. Para diseños más complejos crea los subplots con matplotlib y pasa cada eje a plot.
Establece subplots = True para dibujar cada columna en su propio subplot.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(7)
df = pd.DataFrame({"Temperatura": 25 + rng.normal(0, 1, 30).cumsum(),
"Humedad": 60 + rng.normal(0, 5, 30),
"Viento": rng.gamma(2, 4, 30),
"Lluvia": rng.exponential(2, 30)},
index = pd.date_range("2025-06-01", periods = 30))
df.plot(subplots = True)
# plt.show()

layout establece el número de filas y columnas de la cuadrícula. Utiliza -1 para calcular una de las dimensiones automáticamente.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(7)
df = pd.DataFrame({"Temperatura": 25 + rng.normal(0, 1, 30).cumsum(),
"Humedad": 60 + rng.normal(0, 5, 30),
"Viento": rng.gamma(2, 4, 30),
"Lluvia": rng.exponential(2, 30)},
index = pd.date_range("2025-06-01", periods = 30))
df.plot(subplots = True, layout = (2, 2), legend = False,
title = list(df.columns))
# plt.show()

sharex y sharey utilizan los mismos límites en todos los subplots, lo que facilita compararlos.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(7)
df = pd.DataFrame({"Temperatura": 25 + rng.normal(0, 1, 30).cumsum(),
"Humedad": 60 + rng.normal(0, 5, 30),
"Viento": rng.gamma(2, 4, 30),
"Lluvia": rng.exponential(2, 30)},
index = pd.date_range("2025-06-01", periods = 30))
df[["Viento", "Lluvia"]].plot(subplots = True, layout = (1, 2), sharey = True)
# plt.show()

Desde pandas 2.0 subplots también admite una lista de tuplas para agrupar varias columnas en el mismo subplot.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(7)
df = pd.DataFrame({"Temperatura": 25 + rng.normal(0, 1, 30).cumsum(),
"Humedad": 60 + rng.normal(0, 5, 30),
"Viento": rng.gamma(2, 4, 30),
"Lluvia": rng.exponential(2, 30)},
index = pd.date_range("2025-06-01", periods = 30))
df.plot(subplots = [("Viento", "Lluvia")], layout = (3, 1))
# plt.show()

Crea los subplots con plt.subplots y pasa cada eje al argumento ax. Esto permite combinar distintos tipos de gráficos en la misma figura.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(7)
df = pd.DataFrame({"Temperatura": 25 + rng.normal(0, 1, 30).cumsum(),
"Humedad": 60 + rng.normal(0, 5, 30),
"Viento": rng.gamma(2, 4, 30),
"Lluvia": rng.exponential(2, 30)},
index = pd.date_range("2025-06-01", periods = 30))
fig, (ax1, ax2) = plt.subplots(1, 2, figsize = (8, 3.5))
df["Temperatura"].plot(ax = ax1)
df[["Viento", "Lluvia"]].mean().plot.bar(ax = ax2, rot = 0)
# plt.show()
Aprende más sobre cómo crear y personalizar subplots en matplotlib.
También te puede interesar