Créer des graphiques Matplotlib avec deux axes y

Beginner

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

Introduction

Dans ce tutoriel, vous allez apprendre à créer un graphique avec deux axes y à l'aide de Matplotlib. Le graphique affichera deux ensembles de données avec des unités de mesure différentes sur des échelles différentes. Ce type de graphique est couramment utilisé dans la recherche scientifique pour visualiser les relations entre des variables qui ne sont pas directement comparables.

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

Tout d'abord, nous devons importer les bibliothèques nécessaires. Nous allons utiliser Matplotlib et son module parasite_axes pour créer le graphique.

import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
from mpl_toolkits.axes_grid1.parasite_axes import HostAxes

Définir les données

Ensuite, nous devons définir les données qui seront tracées. Dans cet exemple, nous avons un ensemble d'observations avec quatre variables : nom, mouvement propre angulaire, erreur de mouvement propre angulaire et distance. Nous allons convertir le mouvement propre angulaire en vitesse linéaire et le tracer en fonction de la FWHM (largeur totale à mi-hauteur) des observations.

obs = [["01_S1", 3.88, 0.14, 1970, 63],
       ["01_S4", 5.6, 0.82, 1622, 150],
       ["02_S1", 2.4, 0.54, 1570, 40],
       ["03_S1", 4.1, 0.62, 2380, 170]]

## Facteur de conversion du mouvement propre angulaire en vitesse linéaire
pm_to_kms = 1./206265.*2300*3.085e18/3.15e7/1.e5

Créer le graphique

Nous allons maintenant créer le graphique en utilisant les fonctions HostAxes et twin() du module parasite_axes. HostAxes est utilisé pour créer le graphique principal, et twin() est utilisé pour créer le deuxième axe y.

fig = plt.figure()

## Créer un objet HostAxes
ax_kms = fig.add_subplot(axes_class=HostAxes, aspect=1)

## Créer le deuxième axe y avec des coordonnées transformées
aux_trans = mtransforms.Affine2D().scale(pm_to_kms, 1.)
ax_pm = ax_kms.twin(aux_trans)

## Tracer les données
for n, ds, dse, w, we in obs:
    time = ((2007 + (10. + 4/30.)/12) - 1988.5)
    v = ds / time * pm_to_kms
    ve = dse / time * pm_to_kms
    ax_kms.errorbar([v], [w], xerr=[ve], yerr=[we], color="k")

## Définir les étiquettes des axes
ax_kms.axis["bottom"].set_label("Vitesse linéaire à 2,3 kpc [km/s]")
ax_kms.axis["left"].set_label("FWHM [km/s]")
ax_pm.axis["top"].set_label(r"Mouvement propre [$''$/an]")

## Cacher les étiquettes d'échelle du deuxième axe y
ax_pm.axis["right"].major_ticklabels.set_visible(False)

## Définir les limites du graphique
ax_kms.set_xlim(950, 3700)
ax_kms.set_ylim(950, 3100)

Afficher le graphique

Enfin, nous allons afficher le graphique à l'aide de la fonction plt.show().

plt.show()

Sommaire

Dans ce tutoriel, vous avez appris à créer un graphique avec deux axes y à l'aide de Matplotlib. Vous avez appris à définir les données, créer le graphique et l'afficher. Ce type de graphique est utile pour visualiser les relations entre des variables qui ne sont pas directement comparables.