Tutoriel de personnalisation des marqueurs dans Matplotlib

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 tout au long du processus d'utilisation de la propriété markevery de Line2D pour tracer des marqueurs sur un sous-ensemble de points de données dans Matplotlib. Nous aborderons diverses façons de spécifier les marqueurs, y compris l'utilisation d'entiers, de tuples, de listes, de tranches et de flottants. Nous explorerons également le comportement de markevery avec des échelles linéaires et logarithmiques, ainsi qu'avec des graphes zoomés et polaires.

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 de notes pour accéder au carnet Jupyter pour la pratique.

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.

Définir les points de données

Tout d'abord, nous définissons les points de données que nous utiliserons pour nos graphiques. Dans cet exemple, nous utilisons numpy pour générer un ensemble de valeurs x et y pour une onde sinusoïdale.

import matplotlib.pyplot as plt
import numpy as np

## définir une liste de cas markevery à tracer
cases = [
    None,
    8,
    (30, 8),
    [16, 24, 32],
    [0, -1],
    slice(100, 200, 3),
    0.1,
    0.4,
    (0.2, 0.4)
]

## points de données
delta = 0.11
x = np.linspace(0, 10 - 2 * delta, 200) + delta
y = np.sin(x) + 1.0 + delta

Créer des graphiques avec des échelles linéaires

Ensuite, nous créons un ensemble de sous-graphiques pour montrer le comportement de markevery avec des échelles linéaires. Nous parcourons la liste cases et traçons chaque cas sur un sous-graphique séparé. Nous utilisons le paramètre markevery pour spécifier les points de données à marquer.

## créer des graphiques avec des échelles linéaires
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
    ax.set_title(f'markevery={markevery}')
    ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)

Créer des graphiques avec des échelles logarithmiques

Nous répétons l'étape précédente, mais cette fois avec des échelles logarithmiques. Nous notons que l'échelle logarithmique provoque une asymétrie visuelle dans la distance entre les marqueurs pour un sous-échantillonnage basé sur des entiers, tandis que le sous-échantillonnage basé sur des fractions crée des distributions uniformes.

## créer des graphiques avec des échelles logarithmiques
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
    ax.set_title(f'markevery={markevery}')
    ax.set_xscale('log')
    ax.set_yscale('log')
    ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)

Créer des graphiques agrandis

Nous créons un autre ensemble de sous-graphiques, cette fois pour montrer le comportement de markevery sur des graphiques agrandis. Nous notons que le sous-échantillonnage basé sur des entiers sélectionne des points dans les données sous-jacentes et est indépendant de la vue, tandis que le sous-échantillonnage basé sur des flottants est lié à la diagonale des axes et change la plage de données affichée.

## créer des graphiques agrandis
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
    ax.set_title(f'markevery={markevery}')
    ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
    ax.set_xlim((6, 6.7))
    ax.set_ylim((1.1, 1.7))

Créer des graphiques polaires

Enfin, nous créons un ensemble de sous-graphiques pour montrer le comportement de markevery sur des graphiques polaires. Nous notons que le comportement est similaire à celui sur les échelles linéaires.

## créer des graphiques polaires
r = np.linspace(0, 3.0, 200)
theta = 2 * np.pi * r

fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained',
                        subplot_kw={'projection': 'polar'})
for ax, markevery in zip(axs.flat, cases):
    ax.set_title(f'markevery={markevery}')
    ax.plot(theta, r, 'o', ls='-', ms=4, markevery=markevery)

Sommaire

Dans ce tutoriel, nous avons appris à utiliser la propriété markevery de Line2D pour tracer des marqueurs à un sous-ensemble de points de données dans Matplotlib. Nous avons exploré diverses façons de spécifier les marqueurs, y compris en utilisant des entiers, des tuples, des listes, des tranches et des flottants. Nous avons également vu comment markevery se comporte avec des échelles linéaires et logarithmiques, ainsi qu'avec des graphiques agrandis et polaires.