Kurve mit Fehlerband #

Dieses Beispiel veranschaulicht, wie ein Fehlerband um eine parametrisierte Kurve gezeichnet wird.

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

import numpy as np

import matplotlib.pyplot as plt
from matplotlib.path import Path
from matplotlib.patches import PathPatch

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)
Kurvenfehlerband
[None]

Ein Fehlerband kann verwendet werden, um die Unsicherheit der Kurve anzuzeigen. In diesem Beispiel gehen wir davon aus, dass der Fehler als skalarer Fehler angegeben werden kann , der die Unsicherheit senkrecht zur Kurve in 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 der Verwendung von a PathPatcheignet sich für beliebige Kurven in 2D. Wenn Sie nur ein normales y-vs-x-Diagramm haben, können Sie die einfachere fill_betweenMethode verwenden (siehe auch Fläche zwischen 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.figure(constrained_layout=True)
       .subplots(1, 2, 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()
konstanter Fehler, variabler Fehler

Verweise

In diesem Beispiel wird die Verwendung der folgenden Funktionen, Methoden, Klassen und Module gezeigt:

Galerie generiert von Sphinx-Gallery