Matplotlib Rellenar Entre y Alfa

Beginner

This tutorial is from open-source community. Access the source code

Introducción

En la visualización de datos, a veces es necesario resaltar ciertas áreas o rangos en un gráfico. La función fill_between de Matplotlib es una herramienta útil para generar una región sombreada entre un límite mínimo y máximo. También se puede utilizar para mejorar la apariencia visual de un gráfico. El argumento alpha se puede utilizar para ajustar la transparencia de la región sombreada. Esta práctica te guiará a través de varios ejemplos de uso de fill_between y alpha en Matplotlib para crear gráficos más atractivos visualmente y informativos.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Mejora de un gráfico de líneas con fill_between

El primer ejemplo demuestra cómo mejorar un gráfico de líneas con fill_between. Utilizaremos datos financieros de Google para crear dos subgráficos, uno con un gráfico de líneas simple y el otro con un gráfico de líneas relleno.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cbook as cbook

## carga algunos datos financieros de muestra
r = cbook.get_sample_data('goog.npz')['price_data'].view(np.recarray)

## crea dos subgráficos con los ejes x e y compartidos
fig, (ax1, ax2) = plt.subplots(1, 2, sharex=True, sharey=True)

pricemin = r.close.min()

ax1.plot(r.date, r.close, lw=2)
ax2.fill_between(r.date, pricemin, r.close, alpha=0.7)

for ax in ax1, ax2:
    ax.grid(True)
    ax.label_outer()

ax1.set_ylabel('precio')
fig.suptitle('Precio de cierre diario de Google (GOOG)')
fig.autofmt_xdate()

Uso de alpha para suavizar los colores

El argumento alpha también se puede utilizar para suavizar los colores en gráficos más atractivos visualmente. En el siguiente ejemplo, calcularemos dos poblaciones de caminantes aleatorios con una media y desviación estándar diferentes de las distribuciones normales de las que se extraen los pasos. Utilizamos regiones rellenas para trazar +/- una desviación estándar de la posición media de la población.

## Fixing random state for reproducibility
np.random.seed(19680801)

Nsteps, Nwalkers = 100, 250
t = np.arange(Nsteps)

## an (Nsteps x Nwalkers) array of random walk steps
S1 = 0.004 + 0.02*np.random.randn(Nsteps, Nwalkers)
S2 = 0.002 + 0.01*np.random.randn(Nsteps, Nwalkers)

## an (Nsteps x Nwalkers) array of random walker positions
X1 = S1.cumsum(axis=0)
X2 = S2.cumsum(axis=0)

## Nsteps length arrays empirical means and standard deviations of both
## populations over time
mu1 = X1.mean(axis=1)
sigma1 = X1.std(axis=1)
mu2 = X2.mean(axis=1)
sigma2 = X2.std(axis=1)

## plot it!
fig, ax = plt.subplots(1)
ax.plot(t, mu1, lw=2, label='media de la población 1')
ax.plot(t, mu2, lw=2, label='media de la población 2')
ax.fill_between(t, mu1+sigma1, mu1-sigma1, facecolor='C0', alpha=0.4)
ax.fill_between(t, mu2+sigma2, mu2-sigma2, facecolor='C1', alpha=0.4)
ax.set_title(r'caminantes aleatorios, media empírica $\mu$ y intervalo $\pm \sigma$')
ax.legend(loc='upper left')
ax.set_xlabel('número de pasos')
ax.set_ylabel('posición')
ax.grid()

Resaltando ciertas regiones con where

El argumento de palabras clave where es muy útil para resaltar ciertas regiones del gráfico. where toma una máscara booleana de la misma longitud que los argumentos x, ymin y ymax, y solo rellena la región donde la máscara booleana es True. En el ejemplo siguiente, simulamos un solo caminante aleatorio y calculamos la media y desviación estándar analítica de las posiciones de la población. La media de la población se muestra como una línea discontinua, y la desviación más/menos una sigma a partir de la media se muestra como la región rellena. Utilizamos la máscara where X > upper_bound para encontrar la región donde el caminante está fuera del límite de una sigma, y sombreada esa región de color rojo.

## Fixing random state for reproducibility
np.random.seed(1)

Nsteps = 500
t = np.arange(Nsteps)

mu = 0.002
sigma = 0.01

## los pasos y la posición
S = mu + sigma*np.random.randn(Nsteps)
X = S.cumsum()

## los límites analíticos inferiores y superiores de una sigma de la población
lower_bound = mu*t - sigma*np.sqrt(t)
upper_bound = mu*t + sigma*np.sqrt(t)

fig, ax = plt.subplots(1)
ax.plot(t, X, lw=2, label='posición del caminante')
ax.plot(t, mu*t, lw=1, label='media de la población', color='C0', ls='--')
ax.fill_between(t, lower_bound, upper_bound, facecolor='C0', alpha=0.4,
                label='rango de una sigma')
ax.legend(loc='upper left')

## aquí usamos el argumento where para solo rellenar la región donde el
## caminante está por encima del límite de una sigma de la población
ax.fill_between(t, upper_bound, X, where=X > upper_bound, fc='red', alpha=0.4)
ax.fill_between(t, lower_bound, X, where=X < lower_bound, fc='red', alpha=0.4)
ax.set_xlabel('número de pasos')
ax.set_ylabel('posición')
ax.grid()

Resaltando intervalos de un eje con axhspan y axvspan

Otra forma útil de utilizar regiones rellenas es para resaltar intervalos horizontales o verticales de un eje. Para eso, Matplotlib tiene las funciones auxiliares axhspan y axvspan. Consulte la galería axhspan_demo para obtener más información.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.axhspan(0.25, 0.75, facecolor='0.5', alpha=0.5)
ax.axvspan(6, 7, facecolor='r', alpha=0.5)

plt.show()

Resumen

En este laboratorio, aprendimos cómo utilizar la función fill_between y el argumento alpha en Matplotlib para crear gráficos más atractivos visualmente e informativos. Demostramos varios ejemplos de uso de fill_between y alpha para resaltar ciertas regiones o rangos de un gráfico. También introdujimos brevemente las funciones axhspan y axvspan para resaltar intervalos de un eje.