Notiz
Klicken Sie hier , um den vollständigen Beispielcode herunterzuladen
Bereich zwischen Zeilen füllen #
Dieses Beispiel zeigt, wie fill_between
Sie den Bereich zwischen zwei Linien einfärben können.
import matplotlib.pyplot as plt
import numpy as np
Grundlegende Verwendung #
Die Parameter y1 und y2 können Skalare sein, die eine horizontale Grenze bei den gegebenen y-Werten anzeigen. Wenn nur y1 angegeben ist, ist y2 standardmäßig 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()
Beispiel: Vertrauensbänder #
Eine übliche Anwendung dafür fill_between
ist die Angabe von Konfidenzbändern.
fill_between
verwendet die Farben des Farbkreises als Füllfarbe. Diese können etwas stark sein, wenn sie zum Füllen von Bereichen aufgetragen werden. Daher ist es oft eine gute Praxis, die Farbe aufzuhellen, indem der Bereich mit alpha halbtransparent gemacht wird .
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>]
Horizontale Bereiche selektiv füllen #
Der Parameter erlaubt es, die zu füllenden X-Bereiche anzugeben. Es ist ein boolesches Array mit der gleichen Größe wie x .
Nur x-Bereiche zusammenhängender True - Folgen werden gefüllt. Dadurch wird der Bereich zwischen benachbarten True- und False - Werten nie gefüllt. Dies ist oft unerwünscht, wenn die Datenpunkte eine zusammenhängende Größe darstellen sollen. Es wird daher empfohlen einzustellen, interpolate=True
es sei denn, der x-Abstand der Datenpunkte ist fein genug, so dass der obige Effekt nicht bemerkbar ist. Die Interpolation approximiert die tatsächliche x-Position, an der sich die
Where -Bedingung ändert, und erweitert die Füllung bis dorthin.
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()
Notiz
Ähnliche Lücken treten auf, wenn y1 oder y2 maskierte Arrays sind. Da fehlende Werte nicht angenähert werden können, hat Interpolieren in diesem Fall keine Wirkung. Die Lücken um maskierte Werte herum können nur verringert werden, indem mehr Datenpunkte in der Nähe der maskierten Werte hinzugefügt werden.
Selektives Markieren horizontaler Bereiche über die gesamten Achsen #
Derselbe Auswahlmechanismus kann angewendet werden, um die volle vertikale Höhe der Achsen zu füllen. Um unabhängig von y-Grenzwerten zu sein, fügen wir eine Transformation hinzu, die die x-Werte in Datenkoordinaten und die y-Werte in Achsenkoordinaten interpretiert.
Das folgende Beispiel markiert die Bereiche, in denen die y-Daten über einem bestimmten Schwellenwert liegen.
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>
Verweise
In diesem Beispiel wird die Verwendung der folgenden Funktionen, Methoden, Klassen und Module gezeigt:
Gesamtlaufzeit des Skripts: ( 0 Minuten 1,875 Sekunden)