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

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

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

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

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

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

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.
También te puede interesar