Unités personnalisées de Matplotlib

Beginner

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

Introduction

Matplotlib est une bibliothèque de tracé pour le langage de programmation Python. Elle fournit une API orientée objet pour intégrer des graphiques dans des applications utilisant des kits de bibliothèques GUI de type général tels que Tkinter, wxPython, Qt ou GTK. Matplotlib permet aux développeurs de créer une large gamme de visualisations statiques, animées et interactives en Python.

Dans ce laboratoire, nous allons apprendre à créer des unités personnalisées dans Matplotlib et à tracer des données à l'aide de ces unités personnalisées.

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.

Importation des bibliothèques

Dans la première étape, nous devons importer les bibliothèques requises - matplotlib.pyplot, numpy, matplotlib.ticker et matplotlib.units.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as ticker
import matplotlib.units as units

Créer une classe d'unité personnalisée

Dans cette étape, nous allons créer une classe d'unité personnalisée - Foo. Cette classe prendra en charge la conversion et différents formats d'étiquetage en fonction de l'"unité". Ici, l'"unité" est simplement un facteur de conversion scalaire.

class Foo:
    def __init__(self, val, unit=1.0):
        self.unit = unit
        self._val = val * unit

    def value(self, unit):
        if unit is None:
            unit = self.unit
        return self._val / unit

Créer une classe de convertisseur

Dans cette étape, nous allons créer une classe de convertisseur - FooConverter. Cette classe définira trois méthodes statiques - axisinfo, convert et default_units.

class FooConverter(units.ConversionInterface):
    @staticmethod
    def axisinfo(unit, axis):
        """Retourne les informations sur l'axe Foo."""
        if unit == 1.0 ou unit == 2.0:
            return units.AxisInfo(
                majloc=ticker.IndexLocator(8, 0),
                majfmt=ticker.FormatStrFormatter("VAL: %s"),
                label='foo',
                )

        else:
            return None

    @staticmethod
    def convert(obj, unit, axis):
        """
        Convertit *obj* à l'aide de *unit*.

        Si *obj* est une séquence, retourne la séquence convertie.
        """
        if np.iterable(obj):
            return [o.value(unit) for o in obj]
        else:
            return obj.value(unit)

    @staticmethod
    def default_units(x, axis):
        """Retourne l'unité par défaut pour *x* ou None."""
        if np.iterable(x):
            for thisx in x:
                return thisx.unit
        else:
            return x.unit

Enregistrer la classe d'unité personnalisée

Dans cette étape, nous allons enregistrer la classe d'unité personnalisée - Foo - avec la classe de convertisseur - FooConverter.

units.registry[Foo] = FooConverter()

Créer des points de données

Dans cette étape, nous allons créer quelques points de données à l'aide de la classe d'unité personnalisée - Foo.

## créer quelques Foos
x = [Foo(val, 1.0) for val in range(0, 50, 2)]
## et quelques données y arbitraires
y = [i for i in range(len(x))]

Créer des graphiques

Dans cette étape, nous allons créer deux graphiques - l'un utilisant des unités personnalisées et l'autre utilisant les unités par défaut.

fig, (ax1, ax2) = plt.subplots(1, 2)
fig.suptitle("Unités personnalisées")
fig.subplots_adjust(bottom=0.2)

## tracer en spécifiant les unités
ax2.plot(x, y, 'o', xunits=2.0)
ax2.set_title("xunits = 2.0")
plt.setp(ax2.get_xticklabels(), rotation=30, ha='right')

## tracer sans spécifier les unités ; utilisera la branche None pour axisinfo
ax1.plot(x, y)  ## utilise les unités par défaut
ax1.set_title('Unités par défaut')
plt.setp(ax1.get_xticklabels(), rotation=30, ha='right')

plt.show()

Exécuter le code

Dans la dernière étape, exécutez le code pour créer les graphiques avec les unités personnalisées.

Sommaire

Dans ce laboratoire, nous avons appris à créer des unités personnalisées dans Matplotlib à l'aide d'une classe d'unité personnalisée et d'une classe de convertisseur. Nous avons ensuite créé deux graphiques - l'un utilisant des unités personnalisées et l'autre utilisant les unités par défaut - pour démontrer l'utilisation de ces unités personnalisées. Les unités personnalisées peuvent être utiles lorsqu'il s'agit de traiter des données complexes qui nécessitent une mise à l'échelle personnalisée ou un formatage d'étiquette d'échelle.