Líneas de referencia en matplotlib

Las líneas de referencia destacan valores importantes de un gráfico, como una media, un objetivo o un umbral. Matplotlib proporciona funciones para líneas horizontales, verticales y diagonales y para regiones sombreadas.

Líneas horizontales y verticales con axhline y axvline

axhline dibuja una línea horizontal en un valor de Y dado y axvline una línea vertical en un valor de X dado. Las líneas ocupan todo el gráfico, independientemente de los límites de los ejes.

import numpy as np
import matplotlib.pyplot as plt

months = np.arange(1, 25)
revenue = 50 + months * 2 + np.random.default_rng(9).normal(0, 6, 24)

fig, ax = plt.subplots()
ax.plot(months, revenue, color = "black")

ax.axhline(y = 80, color = "red", linestyle = "--", label = "Objetivo")
ax.axvline(x = 12, color = "green", linewidth = 2, label = "Nuevo producto")
ax.legend()
# plt.show()

Líneas horizontales y verticales en matplotlib con axhline y axvline

Líneas parciales

Los argumentos xmin y xmax de axhline (y ymin e ymax de axvline) limitan la longitud de la línea. Son fracciones de los ejes entre 0 y 1, no valores de los datos.

import numpy as np
import matplotlib.pyplot as plt

months = np.arange(1, 25)
revenue = 50 + months * 2 + np.random.default_rng(9).normal(0, 6, 24)

fig, ax = plt.subplots()
ax.plot(months, revenue)

ax.axhline(y = 70, xmin = 0.25, xmax = 0.75, color = "black")
# plt.show()

Línea horizontal parcial en matplotlib

Varias líneas con hlines y vlines

hlines y vlines dibujan varias líneas a la vez entre los límites de los datos que indiques, y cada línea puede tener su propio color.

import numpy as np
import matplotlib.pyplot as plt

months = np.arange(1, 25)
revenue = 50 + months * 2 + np.random.default_rng(9).normal(0, 6, 24)

fig, ax = plt.subplots()
ax.plot(months, revenue)

ax.hlines(y = [60, 80, 100], xmin = 1, xmax = 24,
          colors = ["tab:red", "gray", "tab:green"], linestyles = ":")
# plt.show()

Varias líneas horizontales en matplotlib con hlines

Líneas con cualquier pendiente con axline

axline dibuja una línea infinita que pasa por dos puntos o por un punto con una pendiente dada. Es útil para agregar una línea de referencia diagonal, por ejemplo y = x en un gráfico de dispersión.

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(1)
x = rng.uniform(0, 10, 50)
y = x + rng.normal(0, 1, 50)

fig, ax = plt.subplots()
ax.scatter(x, y)

ax.axline((0, 0), slope = 1, color = "red")
# plt.show()

Línea de referencia diagonal en matplotlib con axline

Regiones sombreadas con axhspan y axvspan

axhspan y axvspan sombrean una banda horizontal o vertical. Utiliza alpha para que los datos sigan siendo visibles.

import numpy as np
import matplotlib.pyplot as plt

months = np.arange(1, 25)
revenue = 50 + months * 2 + np.random.default_rng(9).normal(0, 6, 24)

fig, ax = plt.subplots()
ax.plot(months, revenue)

ax.axvspan(6, 9, color = "orange", alpha = 0.3)
ax.axhspan(75, 85, color = "gray", alpha = 0.2)
# plt.show()

Sombrear una región en matplotlib con axvspan y axhspan

Área entre curvas

Para sombrear el área entre dos curvas, o entre una curva y un valor, utiliza fill_between. El argumento where rellena solo las regiones que cumplen una condición.

import numpy as np
import matplotlib.pyplot as plt

months = np.arange(1, 25)
revenue = 50 + months * 2 + np.random.default_rng(9).normal(0, 6, 24)

fig, ax = plt.subplots()
ax.plot(months, revenue)

ax.fill_between(months, revenue, 80, where = revenue > 80,
                color = "tab:green", alpha = 0.3)
# plt.show()

Rellenar el área entre dos líneas en matplotlib con fill_between

Agregar una etiqueta a una línea de referencia

Agrega un label para mostrar la línea en la leyenda o escribe un texto junto a ella con text.

import numpy as np
import matplotlib.pyplot as plt

values = np.random.default_rng(4).normal(50, 10, 200)

fig, ax = plt.subplots()
ax.hist(values, color = "lightgray")

ax.axvline(values.mean(), color = "red", label = "Media")
ax.text(values.mean() + 1, 45, f"{values.mean():.1f}", color = "red")
ax.legend()
# plt.show()

Línea de referencia con etiqueta en matplotlib

Puedes personalizar el estilo de las líneas con los argumentos que se explican en el tutorial sobre los tipos de línea. Para agregar flechas y anotaciones consulta el tutorial sobre textos y anotaciones.

Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon

También te puede interesar