Nota
Fare clic qui per scaricare il codice di esempio completo
Riempimento dell'area tra le righe #
Questo esempio mostra come utilizzare fill_between
per colorare l'area tra due linee.
import matplotlib.pyplot as plt
import numpy as np
Utilizzo di base #
I parametri y1 e y2 possono essere scalari, indicando un limite orizzontale ai valori y dati. Se viene fornito solo y1 , y2 assume il valore predefinito 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()
Esempio: bande di confidenza #
Un'applicazione comune fill_between
è l'indicazione delle bande di confidenza.
fill_between
usa i colori del ciclo di colori come colore di riempimento. Questi possono essere un po' forti se applicati per riempire le aree. È quindi spesso una buona pratica schiarire il colore rendendo l'area semitrasparente utilizzando alpha .
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>]
Riempimento selettivo delle regioni orizzontali #
Il parametro dove permette di specificare gli intervalli x da riempire. È un array booleano con le stesse dimensioni di x .
Vengono riempiti solo gli intervalli x di sequenze True contigue. Di conseguenza, l'intervallo tra i valori True e False vicini non viene mai riempito. Questo è spesso indesiderato quando i punti dati devono rappresentare una quantità contigua. Si consiglia pertanto di impostare a interpolate=True
meno che la distanza x dei punti dati non sia sufficientemente precisa in modo che l'effetto di cui sopra non sia evidente. L'interpolazione approssima la posizione x effettiva in cui la
condizione where cambierà ed estende il riempimento fino a lì.
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
Lacune simili si verificheranno se y1 o y2 sono matrici mascherate. Poiché i valori mancanti non possono essere approssimati, l' interpolazione non ha alcun effetto in questo caso. Gli spazi attorno ai valori mascherati possono essere ridotti solo aggiungendo più punti dati vicino ai valori mascherati.
Contrassegnare selettivamente le regioni orizzontali su tutti gli assi #
Lo stesso meccanismo di selezione può essere applicato per riempire l'intera altezza verticale degli assi. Per essere indipendenti dai limiti y, aggiungiamo una trasformazione che interpreta i valori x nelle coordinate dei dati ei valori y nelle coordinate degli assi.
L'esempio seguente contrassegna le regioni in cui i dati y sono al di sopra di una determinata soglia.
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>
Riferimenti
L'uso delle seguenti funzioni, metodi, classi e moduli è mostrato in questo esempio:
Tempo di esecuzione totale dello script: (0 minuti 1,875 secondi)