Création de beignets à l'aide de path.Path et patches.PathPatch

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

Dans ce tutoriel, nous allons créer un beignet en utilisant ~.path.Path et ~.patches.PathPatch de Matplotlib. Nous utiliserons la fonction make_circle() pour créer le cercle et concaténer les sous-chemin intérieur et extérieur ensemble pour créer le beignet.

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 Carnet d'étude pour accéder au carnet Jupyter pour pratiquer.

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

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ésoudrons rapidement le problème pour vous.

Importation des bibliothèques nécessaires

Nous allons commencer par importer les bibliothèques nécessaires pour ce tutoriel.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches
import matplotlib.path as mpath

Définition d'une fonction d'aide

Nous allons définir une fonction d'aide wise() pour déterminer l'orientation du chemin.

def wise(v):
    if v == 1:
        return "CCW"
    else:
        return "CW"

Création du cercle

Nous allons créer le cercle en utilisant la fonction make_circle(). Cette fonction prend le rayon du cercle en entrée et renvoie les coordonnées x et y du cercle.

def make_circle(r):
    t = np.arange(0, np.pi * 2.0, 0.01)
    t = t.reshape((len(t), 1))
    x = r * np.cos(t)
    y = r * np.sin(t)
    return np.hstack((x, y))

Création du beignet

Nous allons créer le beignet en concaténant les sous-chemin intérieur et extérieur. Nous utiliserons codes pour spécifier le type de chaque sommet (MOVETO, LINETO, etc.). Nous créerons ensuite un objet Path à l'aide de mpath.Path et un objet PathPatch à l'aide de mpatches.PathPatch. Enfin, nous ajouterons l'objet PathPatch à l'objet Axes à l'aide de ax.add_patch().

Path = mpath.Path
fig, ax = plt.subplots()

inside_vertices = make_circle(0.5)
outside_vertices = make_circle(1.0)
codes = np.ones(
    len(inside_vertices), dtype=mpath.Path.code_type) * mpath.Path.LINETO
codes[0] = mpath.Path.MOVETO

for i, (inside, outside) in enumerate(((1, 1), (1, -1), (-1, 1), (-1, -1))):
    ## Concatenate the inside and outside subpaths together, changing their
    ## order as needed
    vertices = np.concatenate((outside_vertices[::outside],
                               inside_vertices[::inside]))
    ## Shift the path
    vertices[:, 0] += i * 2.5
    ## The codes will be all "LINETO" commands, except for "MOVETO"s at the
    ## beginning of each subpath
    all_codes = np.concatenate((codes, codes))
    ## Create the Path object
    path = mpath.Path(vertices, all_codes)
    ## Add plot it
    patch = mpatches.PathPatch(path, facecolor='#885500', edgecolor='black')
    ax.add_patch(patch)

    ax.annotate(f"Outside {wise(outside)},\nInside {wise(inside)}",
                (i * 2.5, -1.5), va="top", ha="center")

ax.set_xlim(-2, 10)
ax.set_ylim(-3, 2)
ax.set_title('Mmm, beignets!')
ax.set_aspect(1.0)
plt.show()

Sommaire

Dans ce tutoriel, nous avons appris à créer un beignet à l'aide de ~.path.Path et ~.patches.PathPatch de Matplotlib. Nous avons utilisé la fonction make_circle() pour créer le cercle et concaténé les sous-chemin intérieur et extérieur pour créer le beignet. Nous avons également appris à spécifier le type de chaque sommet et à créer un objet Path à l'aide de mpath.Path. Enfin, nous avons appris à créer un objet PathPatch à l'aide de mpatches.PathPatch et à l'ajouter à l'objet Axes à l'aide de ax.add_patch().

Sommaire

Félicitations ! Vous avez terminé le laboratoire Création de beignets à l'aide de ~.path.Path et ~.patches.PathPatch. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.