Étiquetage personnalisé des contours avec 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

Dans ce tutoriel, nous allons apprendre à créer des étiquettes de contour dans Matplotlib. Les étiquettes de contour sont utilisées pour étiqueter les contours dans un tracé de contour. Ce tutoriel couvrira quelques techniques avancées pour créer des étiquettes de contour personnalisées.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez sur le coin supérieur gauche pour basculer vers l'onglet Carnet de notes 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 limitations 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.

Définir notre surface

Nous allons commencer par définir notre surface à l'aide de numpy et de matplotlib. Cela nous donnera un ensemble de données avec lequel travailler.

import matplotlib.pyplot as plt
import numpy as np

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2

Créer des étiquettes de contour avec des formatteurs de niveau personnalisés

Nous allons maintenant créer des étiquettes de contour avec des formatteurs de niveau personnalisés. Cela nous permettra de formater les étiquettes d'une manière spécifique. Dans ce cas, nous allons supprimer les zéros terminaux et ajouter un signe pourcentage.

def fmt(x):
    s = f"{x:.1f}"
    if s.endswith("0"):
        s = f"{x:.0f}"
    return rf"{s} \%" if plt.rcParams["text.usetex"] else f"{s} %"

fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z)
ax.clabel(CS, CS.levels, inline=True, fmt=fmt, fontsize=10)

Étiqueter les contours avec des chaînes arbitraires à l'aide d'un dictionnaire

Nous pouvons également étiqueter les contours avec des chaînes arbitraires à l'aide d'un dictionnaire. Cela nous permettra d'étiqueter les contours avec des étiquettes personnalisées. Dans cet exemple, nous utiliserons une liste de chaînes pour étiqueter les contours.

fig1, ax1 = plt.subplots()
CS1 = ax1.contour(X, Y, Z)

fmt = {}
strs = ['first','second', 'third', 'fourth', 'fifth','sixth','seventh']
for l, s in zip(CS1.levels, strs):
    fmt[l] = s

ax1.clabel(CS1, CS1.levels[::2], inline=True, fmt=fmt, fontsize=10)

Utiliser un formateur

Nous pouvons également utiliser un formateur pour formater les étiquettes de contour. Cela nous permettra de formater les étiquettes d'une manière spécifique. Dans cet exemple, nous utiliserons un LogFormatterMathtext pour formater les étiquettes.

fig2, ax2 = plt.subplots()
CS2 = ax2.contour(X, Y, 100**Z, locator=plt.LogLocator())
fmt = ticker.LogFormatterMathtext()
fmt.create_dummy_axis()
ax2.clabel(CS2, CS2.levels, fmt=fmt)
ax2.set_title("$100^Z$")

plt.show()

Sommaire

Dans ce tutoriel, nous avons appris à créer des étiquettes de contour dans Matplotlib. Nous avons abordé certaines techniques avancées pour créer des étiquettes de contour personnalisées, y compris des formatteurs de niveau personnalisés, l'étiquetage des contours avec des chaînes arbitraires et l'utilisation d'un formateur pour formater les étiquettes de contour. Ces techniques peuvent être utiles pour créer des visualisations à la fois informatives et esthétiquement agréables.