Gráficos con pandas

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.

El método 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()

Gráfico de líneas con el método plot de pandas

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()

Seleccionar las columnas a representar con pandas

Tipos de gráficos con 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()

Gráfico de barras en pandas con kind bar

Personalizar el gráfico

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()

Personalizar el título, las etiquetas y los colores de un gráfico de pandas

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()

Usar un colormap en un gráfico de pandas

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()

Diferentes tipos de línea en un gráfico de pandas

Un subplot por columna

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()

Subplots para cada columna con plot de pandas

Eje Y secundario

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()

Eje Y secundario con plot de pandas

Más personalización con matplotlib

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()

Personalizar un gráfico de pandas con matplotlib

Gráficos interactivos con plotly como backend

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.

Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon

También te puede interesar