Llenando el área entre líneas #

Este ejemplo muestra cómo usar fill_betweenpara 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()
llenar entre y1 y 0, llenar entre y1 y 1, llenar entre y1 y y2

Ejemplo: Bandas de confianza #

Una aplicación común fill_betweenes la indicación de bandas de confianza.

fill_betweenutiliza 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')
llenar entre demostración
[<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=Truemenos 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()
interpolación=Falso, interpolación=Verdadero

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())
llenar entre demostración
<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)

Galería generada por Sphinx-Gallery