Tracer une courbe avec une bande d'erreur

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce tutoriel vous guidera sur la manière de tracer une courbe avec une bande d'erreur à l'aide de Python Matplotlib. Une bande d'erreur est utilisée pour indiquer l'incertitude de la courbe. Dans cet exemple, nous supposons que l'erreur peut être donnée sous forme d'un scalaire _err_ qui décrit l'incertitude perpendiculaire à la courbe en chaque point. Nous visualisons cette erreur comme une bande colorée autour de la trajectoire à l'aide d'un .PathPatch. Le patch est créé à partir de deux segments de chemin (xp, yp) et (xn, yn) qui sont déplacés de +/- _err_ perpendiculairement à la courbe (x, y).

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limites de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous réglerons rapidement le problème pour vous.

Importation des bibliothèques requises

La première étape consiste à importer les bibliothèques requises. Nous utiliserons Matplotlib, NumPy, PathPatch et Path.

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

Définir la courbe

Ensuite, nous définissons la courbe autour de laquelle nous voulons tracer la bande d'erreur. Dans cet exemple, nous utiliserons une courbe paramétrée. Une courbe paramétrée (x(t), y(t)) peut être dessinée directement à l'aide de ~.Axes.plot.

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)

Définir la bande d'erreur

Nous allons maintenant définir la bande d'erreur que nous voulons tracer autour de la courbe. Dans cet exemple, nous supposerons que l'erreur peut être donnée sous forme d'un scalaire _err_ qui décrit l'incertitude perpendiculaire à la courbe en chaque point.

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))

Dessiner la bande d'erreur

Nous pouvons maintenant tracer la bande d'erreur en appelant la fonction draw_error_band et en passant les paramètres appropriés.

fig, axs = plt.subplots(1, 2, layout='constrained', sharex=True, sharey=True)
errs = [
    (axs[0], "erreur constante", 0.05),
    (axs[1], "erreur variable", 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()

Voir la bande d'erreur

La bande d'erreur devrait maintenant être visible autour de la courbe.

Sommaire

Dans ce tutoriel, nous avons appris à tracer une courbe avec une bande d'erreur à l'aide de Python Matplotlib. Nous avons commencé par importer les bibliothèques requises, défini la courbe, défini la bande d'erreur, tracé la bande d'erreur et visualisé la bande d'erreur.