Matplotlib Inset Locator

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

Matplotlib est une bibliothèque de visualisation de données en Python. La fonction .inset_locator permet de placer facilement des insets dans les coins des axes. Dans ce laboratoire, nous allons explorer comment utiliser la fonction .inset_locator pour créer des insets dans les graphiques Matplotlib.

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

Créer une figure avec deux sous-graphiques

Tout d'abord, nous devons créer une figure avec deux sous-graphiques. Nous allons utiliser la méthode plt.subplots() pour créer une figure avec deux sous-graphiques côte à côte.

import matplotlib.pyplot as plt

fig, (ax, ax2) = plt.subplots(1, 2, figsize=[5.5, 2.8])

Créer des axes insets

Ensuite, nous allons créer des axes insets dans chacun des sous-graphiques. Nous utiliserons la méthode inset_axes() pour créer les axes insets. Nous allons créer quatre insets avec différentes tailles et emplacements.

from mpl_toolkits.axes_grid1.inset_locator import inset_axes

## Crée un inset de largeur 1,3 pouces et hauteur 0,9 pouces
## à l'emplacement supérieur droit par défaut
axins = inset_axes(ax, width=1.3, height=0.9)

## Crée un inset de largeur 30% et hauteur 40% de la boîte englobante
## des axes parentes
## dans le coin inférieur gauche (loc=3)
axins2 = inset_axes(ax, width="30%", height="40%", loc=3)

## Crée un inset avec des spécifications mixtes dans le second sous-graphique ;
## la largeur est de 30% de la boîte englobante des axes parentes et
## la hauteur est de 1 pouce dans le coin supérieur gauche (loc=2)
axins3 = inset_axes(ax2, width="30%", height=1., loc=2)

## Crée un inset dans le coin inférieur droit (loc=4) avec borderpad=1, c'est-à-dire
## un rembourrage de 10 points (car 10pt est la taille de police par défaut)
## par rapport aux axes parentes
axins4 = inset_axes(ax2, width="20%", height="20%", loc=4, borderpad=1)

Désactiver les étiquettes d'échelle

Pour supprimer les étiquettes d'échelle de chacun des insets, nous pouvons utiliser la méthode tick_params() et définir labelleft et labelbottom sur False.

## Désactive les étiquettes d'échelle des insets
for axi in [axins, axins2, axins3, axins4]:
    axi.tick_params(labelleft=False, labelbottom=False)

Contrôler la position et la taille des insets

Nous pouvons utiliser les paramètres bbox_to_anchor et bbox_transform pour contrôler la position et la taille des insets. Ces paramètres permettent un contrôle fin des positions et tailles des insets, ou même de les positionner à des emplacements complètement arbitraires.

## Nous utilisons la transformation des axes comme bbox_transform. Par conséquent,
## la boîte englobante doit être spécifiée en coordonnées d'axes ((0, 0) est le
## coin inférieur gauche des axes, (1, 1) est le coin supérieur droit).
## La boîte englobante (.2,.4,.6,.5) commence à (.2,.4) et s'étend jusqu'à
## (.8,.9) dans ces coordonnées.
## A l'intérieur de cette boîte englobante, un inset de moitié de la largeur
## de la boîte englobante et trois quarts de la hauteur de la boîte englobante
## est créé. Le coin inférieur gauche de l'inset est aligné sur le coin inférieur
## gauche de la boîte englobante (loc=3).
## L'inset est ensuite décalé par la valeur par défaut de 0,5 en unités de la
## taille de police.
axins = inset_axes(ax, width="50%", height="75%",
                   bbox_to_anchor=(.2,.4,.6,.5),
                   bbox_transform=ax.transAxes, loc=3)

Créer des insets avec des positions arbitraires

Nous pouvons créer des insets avec des positions arbitraires en utilisant le paramètre bbox_to_anchor pour spécifier une boîte englobante en coordonnées de données et en utilisant le paramètre bbox_transform pour spécifier la transformation de la boîte englobante.

## Crée un inset en coordonnées de données en utilisant ax.transData comme transformation
axins3 = inset_axes(ax2, width="100%", height="100%",
                    bbox_to_anchor=(1e-2, 2, 1e3, 3),
                    bbox_transform=ax2.transData, loc=2, borderpad=0)

Créer un inset en dehors des axes

Nous pouvons créer un inset en dehors des axes en utilisant le paramètre bbox_to_anchor pour spécifier une boîte englobante en coordonnées d'axes qui s'étend en dehors des axes.

## Crée un inset en dehors des axes
axins = inset_axes(ax, width="100%", height="100%",
                   bbox_to_anchor=(1.05,.6,.5,.4),
                   bbox_transform=ax.transAxes, loc=2, borderpad=0)

Créer un inset avec une boîte englobante à 2-uplets

Nous pouvons créer un inset avec une boîte englobante à 2-uplets en spécifiant la largeur et la hauteur en pouces et en utilisant le paramètre bbox_to_anchor pour spécifier le coin inférieur gauche de l'inset.

## Crée un inset avec une boîte englobante à 2-uplets. Notez que cela crée une
## boîte englobante sans étendue. Cela n'a donc de sens que lorsqu'on spécifie
## la largeur et la hauteur en unités absolues (pouces).
axins2 = inset_axes(ax, width=0.5, height=0.4,
                    bbox_to_anchor=(0.33, 0.25),
                    bbox_transform=ax.transAxes, loc=3, borderpad=0)

Créer un inset centré dans les coordonnées de la figure

Nous pouvons créer un inset qui est horizontalement centré dans les coordonnées de la figure et verticalement lié pour être aligné avec les axes en utilisant la méthode blended_transform_factory() pour créer une transformation mixte et en l'utilisant comme paramètre bbox_transform.

## Crée un inset horizontalement centré dans les coordonnées de la figure et verticalement
## lié pour être aligné avec les axes.
from matplotlib.transforms import blended_transform_factory

transform = blended_transform_factory(fig.transFigure, ax2.transAxes)
axins4 = inset_axes(ax2, width="16%", height="34%",
                    bbox_to_anchor=(0, 0, 1, 1),
                    bbox_transform=transform, loc=8, borderpad=0)

Récapitulatif

Dans ce laboratoire, nous avons appris à utiliser la fonction .inset_locator dans Matplotlib pour créer des insets dans les graphiques. Nous avons créé des insets de différentes tailles et emplacements, contrôlé la position et la taille de l'inset, et créé des insets avec des positions arbitraires. Nous avons également créé des insets en dehors des axes, des insets avec des boîtes englobantes à 2-uplets, et des insets centrés dans les coordonnées de la figure.