Bereich zwischen Zeilen füllen #

Dieses Beispiel zeigt, wie fill_betweenSie 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()
zwischen y1 und 0 füllen, zwischen y1 und 1 füllen, zwischen y1 und y2 füllen

Beispiel: Vertrauensbänder #

Eine übliche Anwendung dafür fill_betweenist die Angabe von Konfidenzbändern.

fill_betweenverwendet 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')
zwischen Demo füllen
[<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=Truees 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()
Interpolation=Falsch, Interpolation=Wahr

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())
zwischen Demo füllen
<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)

Galerie generiert von Sphinx-Gallery