Nota
Haga clic aquí para descargar el código de ejemplo completo
Llenando el área entre líneas #
Este ejemplo muestra cómo usar fill_between
para colorear el área entre dos líneas.
import matplotlib.pyplot as plt
import numpy as np
Uso básico #
Los parámetros y1 e y2 pueden ser escalares, lo que indica un límite horizontal en los valores de y dados. Si solo se da y1 , y2 por defecto es 0.
x = np.arange(0.0, 2, 0.01)
y1 = np.sin(2 * np.pi * x)
y2 = 0.8 * np.sin(4 * np.pi * x)
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=(6, 6))
ax1.fill_between(x, y1)
ax1.set_title('fill between y1 and 0')
ax2.fill_between(x, y1, 1)
ax2.set_title('fill between y1 and 1')
ax3.fill_between(x, y1, y2)
ax3.set_title('fill between y1 and y2')
ax3.set_xlabel('x')
fig.tight_layout()
Ejemplo: Bandas de confianza #
Una aplicación común fill_between
es la indicación de bandas de confianza.
fill_between
utiliza los colores del ciclo de color como color de relleno. Estos pueden ser un poco fuertes cuando se aplican para rellenar áreas. Por lo tanto, a menudo es una buena práctica aclarar el color haciendo que el área sea semitransparente usando alfa .
N = 21
x = np.linspace(0, 10, 11)
y = [3.9, 4.4, 10.8, 10.3, 11.2, 13.1, 14.1, 9.9, 13.9, 15.1, 12.5]
# fit a linear curve an estimate its y-values and their error.
a, b = np.polyfit(x, y, deg=1)
y_est = a * x + b
y_err = x.std() * np.sqrt(1/len(x) +
(x - x.mean())**2 / np.sum((x - x.mean())**2))
fig, ax = plt.subplots()
ax.plot(x, y_est, '-')
ax.fill_between(x, y_est - y_err, y_est + y_err, alpha=0.2)
ax.plot(x, y, 'o', color='tab:brown')
[<matplotlib.lines.Line2D object at 0x7f2d0108d030>]
Relleno selectivo de regiones horizontales #
El parámetro donde permite especificar los rangos x a rellenar. Es una matriz booleana con el mismo tamaño que x .
Solo se llenan rangos x de secuencias verdaderas contiguas. Como resultado, el rango entre los valores True y False vecinos nunca se llena. Esto a menudo no se desea cuando los puntos de datos deben representar una cantidad contigua. Por lo tanto, se recomienda configurar a interpolate=True
menos que la distancia x de los puntos de datos sea lo suficientemente fina como para que el efecto anterior no sea perceptible. La interpolación aproxima la posición x real en la que
cambiará la condición where y extiende el relleno hasta allí.
x = np.array([0, 1, 2, 3])
y1 = np.array([0.8, 0.8, 0.2, 0.2])
y2 = np.array([0, 0, 1, 1])
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax1.set_title('interpolation=False')
ax1.plot(x, y1, 'o--')
ax1.plot(x, y2, 'o--')
ax1.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3)
ax1.fill_between(x, y1, y2, where=(y1 < y2), color='C1', alpha=0.3)
ax2.set_title('interpolation=True')
ax2.plot(x, y1, 'o--')
ax2.plot(x, y2, 'o--')
ax2.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3,
interpolate=True)
ax2.fill_between(x, y1, y2, where=(y1 <= y2), color='C1', alpha=0.3,
interpolate=True)
fig.tight_layout()
Nota
Ocurrirán espacios similares si y1 o y2 son matrices enmascaradas. Dado que los valores perdidos no se pueden aproximar, la interpolación no tiene efecto en este caso. Las brechas alrededor de los valores enmascarados solo se pueden reducir agregando más puntos de datos cerca de los valores enmascarados.
Marcado selectivo de regiones horizontales en todos los ejes #
El mismo mecanismo de selección se puede aplicar para llenar toda la altura vertical de los ejes. Para ser independientes de los límites de y, agregamos una transformación que interpreta los valores de x en coordenadas de datos y los valores de y en coordenadas de ejes.
El siguiente ejemplo marca las regiones en las que los datos y están por encima de un umbral determinado.
fig, ax = plt.subplots()
x = np.arange(0, 4 * np.pi, 0.01)
y = np.sin(x)
ax.plot(x, y, color='black')
threshold = 0.75
ax.axhline(threshold, color='green', lw=2, alpha=0.7)
ax.fill_between(x, 0, 1, where=y > threshold,
color='green', alpha=0.5, transform=ax.get_xaxis_transform())
<matplotlib.collections.PolyCollection object at 0x7f2d00e640a0>
Referencias
En este ejemplo se muestra el uso de las siguientes funciones, métodos, clases y módulos:
Tiempo total de ejecución del script: (0 minutos 1,875 segundos)