Kurve mit Fehlerband#

Dieses Beispiel veranschaulicht, wie man ein Fehlerband um eine parametrisierte Kurve zeichnet.

Eine parametrisierte Kurve x(t), y(t) kann direkt mit plot gezeichnet werden.

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.patches import PathPatch
from matplotlib.path import Path

N = 400
t = np.linspace(0, 2 * np.pi, N)
r = 0.5 + np.cos(t)
x, y = r * np.cos(t), r * np.sin(t)

fig, ax = plt.subplots()
ax.plot(x, y, "k")
ax.set(aspect=1)
curve error band

Ein Fehlerband kann verwendet werden, um die Unsicherheit der Kurve anzuzeigen. In diesem Beispiel gehen wir davon aus, dass der Fehler als Skalar err angegeben werden kann, der die Unsicherheit senkrecht zur Kurve an jedem Punkt beschreibt.

Wir visualisieren diesen Fehler als farbiges Band um den Pfad mit einem PathPatch. Der Patch wird aus zwei Pfadsegmenten (xp, yp) und (xn, yn) erstellt, die um +/- err senkrecht zur Kurve (x, y) verschoben sind.

Hinweis: Diese Methode zur Verwendung eines PathPatch eignet sich für beliebige Kurven in 2D. Wenn Sie nur ein Standard-y-gegen-x-Diagramm haben, können Sie die einfachere fill_between-Methode verwenden (siehe auch Die Fläche zwischen zwei Linien füllen).

def draw_error_band(ax, x, y, err, **kwargs):
    # Calculate normals via centered finite differences (except the first point
    # which uses a forward difference and the last point which uses a backward
    # difference).
    dx = np.concatenate([[x[1] - x[0]], x[2:] - x[:-2], [x[-1] - x[-2]]])
    dy = np.concatenate([[y[1] - y[0]], y[2:] - y[:-2], [y[-1] - y[-2]]])
    l = np.hypot(dx, dy)
    nx = dy / l
    ny = -dx / l

    # end points of errors
    xp = x + nx * err
    yp = y + ny * err
    xn = x - nx * err
    yn = y - ny * err

    vertices = np.block([[xp, xn[::-1]],
                         [yp, yn[::-1]]]).T
    codes = np.full(len(vertices), Path.LINETO)
    codes[0] = codes[len(xp)] = Path.MOVETO
    path = Path(vertices, codes)
    ax.add_patch(PathPatch(path, **kwargs))


_, axs = plt.subplots(1, 2, layout='constrained', sharex=True, sharey=True)
errs = [
    (axs[0], "constant error", 0.05),
    (axs[1], "variable error", 0.05 * np.sin(2 * t) ** 2 + 0.04),
]
for i, (ax, title, err) in enumerate(errs):
    ax.set(title=title, aspect=1, xticks=[], yticks=[])
    ax.plot(x, y, "k")
    draw_error_band(ax, x, y, err=err,
                    facecolor=f"C{i}", edgecolor="none", alpha=.3)

plt.show()
constant error, variable error

Referenzen

Die Verwendung der folgenden Funktionen, Methoden, Klassen und Module wird in diesem Beispiel gezeigt

Tags: Komponente: Fehler Diagrammtyp: Linie Niveau: Fortgeschritten

Gesamtlaufzeit des Skripts: (0 Minuten 1,399 Sekunden)

Galerie generiert von Sphinx-Gallery