Création de graphes de courbes de niveau avec Python Matplotlib

Beginner

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

Introduction

Ce laboratoire est un tutoriel étape par étape sur la manière de créer des graphes de niveau à l'aide de Matplotlib en Python. Les graphes de niveau sont utiles pour visualiser des données tridimensionnelles en deux dimensions. Dans ce tutoriel, nous allons illustrer le tracé simple de graphes de niveau, les graphes de niveau sur une image avec une barre de couleur pour les graphes de niveau, et les graphes de niveau étiquetés.

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

Importation des bibliothèques requises

Avant de commencer à créer notre graphe de niveau, nous devons importer les bibliothèques nécessaires. Nous utiliserons numpy et matplotlib pour ce tutoriel.

import matplotlib.pyplot as plt
import numpy as np

Création des données

Nous devons créer les données que nous utiliserons pour créer le graphe de niveau. Dans cet exemple, nous allons créer deux fonctions gaussiennes 2D.

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 un graphe de niveau simple avec étiquettes

Maintenant que nous avons nos données, nous pouvons créer un graphe de niveau simple avec des étiquettes en utilisant les couleurs par défaut.

fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z)
ax.clabel(CS, inline=True, fontsize=10)
ax.set_title('Simplest default with labels')

Placer manuellement les étiquettes des courbes de niveau

Nous pouvons également placer manuellement les étiquettes des courbes de niveau en fournissant une liste de positions (en coordonnées de données).

fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z)
manual_locations = [
    (-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)]
ax.clabel(CS, inline=True, fontsize=10, manual=manual_locations)
ax.set_title('labels at selected locations')

Définir les couleurs des courbes de niveau

Nous pouvons forcer toutes les courbes de niveau à avoir la même couleur ou définir les courbes de niveau négatives pour qu'elles soient pleines au lieu de pointillées.

fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z, 6, colors='k')  ## Negative contours default to dashed.
ax.clabel(CS, fontsize=9, inline=True)
ax.set_title('Single color - negative contours dashed')
plt.rcParams['contour.negative_linestyle'] = 'solid'
fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z, 6, colors='k')  ## Negative contours default to dashed.
ax.clabel(CS, fontsize=9, inline=True)
ax.set_title('Single color - negative contours solid')

Spécifier manuellement les couleurs des courbes de niveau

Nous pouvons également spécifier manuellement les couleurs des courbes de niveau.

fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z, 6,
                linewidths=np.arange(.5, 4,.5),
                colors=('r', 'green', 'blue', (1, 1, 0), '#afeeee', '0.5'),
                )
ax.clabel(CS, fontsize=9, inline=True)
ax.set_title('Crazy lines')

Utiliser une carte de couleurs pour spécifier les couleurs des courbes de niveau

Nous pouvons utiliser une carte de couleurs pour spécifier les couleurs des lignes de courbes de niveau.

fig, ax = plt.subplots()
im = ax.imshow(Z, interpolation='bilinear', origin='lower',
               cmap=cm.gray, extent=(-3, 3, -2, 2))
levels = np.arange(-1.2, 1.6, 0.2)
CS = ax.contour(Z, levels, origin='lower', cmap='flag', extend='both',
                linewidths=2, extent=(-3, 3, -2, 2))

## Épaissez la courbe de niveau zéro.
CS.collections[6].set_linewidth(4)

ax.clabel(CS, levels[1::2],  ## étiquetez chaque seconde ligne de niveau
          inline=True, fmt='%1.1f', fontsize=14)

## Créez une barre de couleur pour les lignes de courbes de niveau
CB = fig.colorbar(CS, shrink=0.8)

ax.set_title('Lignes avec barre de couleur')

## Nous pouvons toujours ajouter une barre de couleur pour l'image également.
CBI = fig.colorbar(im, orientation='horizontal', shrink=0.8)

## Cela rend la barre de couleur d'origine un peu décalée,
## donc améliorons sa position.

l, b, w, h = ax.get_position().bounds
ll, bb, ww, hh = CB.ax.get_position().bounds
CB.ax.set_position([ll, b + 0.1*h, ww, h*0.8])

Sommaire

Dans ce laboratoire, nous avons appris à créer des graphes de courbes de niveau à l'aide de Python Matplotlib. Nous avons vu comment créer un graphe de courbes de niveau simple avec des étiquettes, placer manuellement les étiquettes des courbes de niveau, définir les couleurs des courbes de niveau, spécifier manuellement les couleurs des courbes de niveau et utiliser une carte de couleurs pour spécifier les couleurs des courbes de niveau.