Los DataFrames y las Series de pandas tienen un método plot que crea gráficos con matplotlib en una sola línea de código. El índice se utiliza para el eje X y cada columna se convierte en una serie, por lo que es la forma más rápida de explorar tus datos visualmente.
plot
Por defecto plot crea un gráfico de líneas con una línea por cada columna numérica del data frame.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(1)
df = pd.DataFrame(rng.normal(size = (100, 3)).cumsum(axis = 0),
columns = ["A", "B", "C"],
index = pd.date_range("2025-01-01", periods = 100))
df.plot()
# plt.show()

Seleccionar las columnas
Utiliza x e y para elegir las columnas. y también admite una lista de columnas.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"mes": ["Ene", "Feb", "Mar", "Abr", "May", "Jun"],
"ventas": [12, 15, 14, 18, 21, 19],
"costes": [8, 9, 9, 11, 12, 12]})
df.plot(x = "mes", y = ["ventas", "costes"])
# plt.show()

kind
El argumento kind establece el tipo de gráfico. Cada tipo también tiene su propio método en el accesor plot, de modo que df.plot(kind = "bar") es lo mismo que df.plot.bar().
| kind | Método | Gráfico |
|---|---|---|
“line”
|
plot.line()
|
Gráfico de líneas |
“bar” / “barh”
|
plot.bar() / plot.barh()
|
Gráfico de barras |
“hist”
|
plot.hist()
|
Histograma |
“box”
|
plot.box()
|
Box plot |
“kde” / “density”
|
plot.kde()
|
Gráfico de densidad |
“area”
|
plot.area()
|
Gráfico de áreas |
“pie”
|
plot.pie()
|
Gráfico de sectores |
“scatter”
|
plot.scatter()
|
Gráfico de dispersión |
“hexbin”
|
plot.hexbin()
|
Gráfico hexbin |
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"ventas": [12, 18, 9, 15],
"costes": [8, 11, 7, 10]},
index = ["Q1", "Q2", "Q3", "Q4"])
df.plot(kind = "bar")
# plt.show()

plot admite muchos argumentos para personalizar el gráfico: title, xlabel, ylabel, figsize, color, grid, legend, rot (rotación de las etiquetas de los ejes), xlim, ylim, logy y otros.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"ventas": [12, 18, 9, 15],
"costes": [8, 11, 7, 10]},
index = ["Q1", "Q2", "Q3", "Q4"])
df.plot(kind = "bar", title = "Resultados trimestrales",
xlabel = "Trimestre", ylabel = "Euros",
color = ["#2A9D8F", "#E76F51"], rot = 0, grid = True)
# plt.show()

Colormap
En lugar de indicar los colores uno a uno puedes pasar un colormap de matplotlib con colormap.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(1)
df = pd.DataFrame(rng.normal(size = (100, 3)).cumsum(axis = 0),
columns = ["A", "B", "C"],
index = pd.date_range("2025-01-01", periods = 100))
df.plot(colormap = "viridis")
# plt.show()

Tipos de línea
El argumento style admite una cadena de formato de matplotlib para cada columna.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(1)
df = pd.DataFrame(rng.normal(size = (100, 3)).cumsum(axis = 0),
columns = ["A", "B", "C"],
index = pd.date_range("2025-01-01", periods = 100))
df.plot(style = ["-", "--", ":"])
# plt.show()

Establece subplots = True para dibujar cada columna en su propio subplot. Utiliza layout para elegir el número de filas y columnas y sharey para compartir el eje Y.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(1)
df = pd.DataFrame(rng.normal(size = (100, 3)).cumsum(axis = 0),
columns = ["A", "B", "C"],
index = pd.date_range("2025-01-01", periods = 100))
df.plot(subplots = True, layout = (3, 1), sharex = True)
# plt.show()

Cuando las columnas tienen escalas diferentes, pasa el nombre de una o varias columnas a secondary_y para dibujarlas en un segundo eje.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"ventas": [120, 150, 140, 180, 210, 190],
"margen": [0.12, 0.15, 0.13, 0.18, 0.2, 0.17]})
df.plot(secondary_y = "margen")
# plt.show()

plot devuelve unos ejes de matplotlib, por lo que puedes seguir personalizando el gráfico con todos los métodos de matplotlib, por ejemplo agregando una línea de referencia o dando formato a los ejes.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"ventas": [12, 18, 9, 15],
"costes": [8, 11, 7, 10]},
index = ["Q1", "Q2", "Q3", "Q4"])
ax = df.plot(kind = "bar", rot = 0)
ax.axhline(14, color = "black", linestyle = "--", label = "Objetivo")
ax.spines[["top", "right"]].set_visible(False)
ax.legend()
# plt.show()

pandas también puede utilizar otras librerías de gráficos. Si tienes plotly instalado, cambia el backend para crear gráficos interactivos con la misma sintaxis:
import pandas as pd
pd.options.plotting.backend = "plotly"
df = pd.DataFrame({"ventas": [12, 18, 9, 15], "costes": [8, 11, 7, 10]})
fig = df.plot(kind = "bar")
fig.show()
Aprende más sobre cada tipo de gráfico en los tutoriales sobre el gráfico de líneas, el gráfico de barras, el histograma, el box plot, el gráfico de dispersión, el gráfico de áreas y el gráfico de sectores. Para personalizar los gráficos consulta las guías sobre los títulos, los ejes, la leyenda, los colores, los subplots y el tamaño y los estilos.
También te puede interesar