Comment créer un effet de zoom sur une figure matplotlib en utilisant indicate_inset_zoom() ?

Published: 18 septembre 2023

Tags: Python; Matplotlib;

DMCA.com Protection Status

La méthode indicate_inset_zoom() est un outil puissant pour créer un effet de zoom sur une figure matplotlib. Pour l'utiliser, vous devrez d'abord définir les axes de votre figure matplotlib, puis spécifier la région à zoomer en utilisant les paramètres xmin, xmax, ymin et ymax. Après avoir défini ces paramètres, vous pouvez appeler la méthode indicate_inset_zoom() avec les mêmes paramètres. Cela créera une superposition rectangulaire sur votre figure indiquant la région zoomée. Vous pouvez également spécifier d'autres paramètres facultatifs tels que la couleur et le style de ligne pour personnaliser l'apparence de votre effet de zoom.

Étape 1: Créer une figure

Tout d'abord, utilisons matplotlib pour créer un simple graphique:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x1 = [0,1,2,2.05,2.10,3,4,5]
x2 = [0,1,2,2.05,2.10,3,4,5]

ax.scatter(x1,x2)

plt.title("How to create a zoom effect on a matplotlib figure ?")

plt.savefig('zoom_effect_matplotlib_1.png', dpi=100, bbox_inches='tight' )

plt.show()

Comment créer un effet de zoom sur une figure matplotlib en utilisant indicate_inset_zoom() ?
Comment créer un effet de zoom sur une figure matplotlib en utilisant indicate_inset_zoom() ?

Nous souhaitons créer une fonction de zoom pour les données situées au centre de la figure.

Étape 2 : Créez une figure plus petite.

La fonction "inset_axes" de Matplotlib permet aux utilisateurs de placer un axe par-dessus un autre axe. Cela est particulièrement utile lors de la visualisation de deux ensembles de données connexes côte à côte, ou lorsqu'un graphique plus petit doit être placé à l'intérieur d'un plus grand pour la comparaison et le contraste. Avec inset_axes, vous pouvez créer un petit graphique avec ses propres axes x et y situés à l'intérieur de la zone d'un graphique plus grand. Cela facilite la comparaison des valeurs entre les deux graphiques, ainsi que l'ajout d'étiquettes et d'autres annotations qui aident à illustrer les points clés. Pour utiliser inset_axes, vous fournissez les coordonnées où vous souhaitez placer le plus petit graphique (en fractions de la taille totale de la figure) et vous fournissez vos propres données pour créer le graphique:

import matplotlib.pyplot as plt

from mpl_toolkits.axes_grid.inset_locator import inset_axes

fig, ax = plt.subplots()

x1 = [0,1,2,2.05,2.10,3,4,5]
x2 = [0,1,2,2.05,2.10,3,4,5]

ax.scatter(x1,x2)

axin = ax.inset_axes([0.75, 0.1, 0.2, 0.2])

axin.set_xlim(1.9,2.2)
axin.set_ylim(1.9,2.2)

axin.scatter(x1,x2)

plt.title("How to create a zoom effect on a matplotlib figure ?")

plt.savefig('zoom_effect_matplotlib_2.png', dpi=100, bbox_inches='tight' )

plt.show()

Comment créer un effet de zoom sur une figure matplotlib en utilisant indicate_inset_zoom() ?
Comment créer un effet de zoom sur une figure matplotlib en utilisant indicate_inset_zoom() ?

Étape 3 : Créez un effet de zoom en utilisant indicate_inset_zoom()

Ensuite, nous pouvons utiliser la méthode indicate_inset_zoom().

import matplotlib.pyplot as plt

from mpl_toolkits.axes_grid.inset_locator import inset_axes

fig, ax = plt.subplots()

x1 = [0,1,2,2.05,2.10,3,4,5]
x2 = [0,1,2,2.05,2.10,3,4,5]

ax.scatter(x1,x2)

axin = ax.inset_axes([0.75, 0.1, 0.2, 0.2])

axin.set_xlim(1.9,2.2)
axin.set_ylim(1.9,2.2)

axin.scatter(x1,x2)

ax.indicate_inset_zoom(axin)

plt.title("How to create a zoom effect on a matplotlib figure ?")

plt.savefig('zoom_effect_matplotlib_3.png', dpi=100, bbox_inches='tight' )

plt.show()

Comment créer un effet de zoom sur une figure matplotlib en utilisant indicate_inset_zoom() ?
Comment créer un effet de zoom sur une figure matplotlib en utilisant indicate_inset_zoom() ?

Étape 4 : Supprimer les marques et les étiquettes.

Notez que nous pouvons également supprimer les étiquettes et les repères:

import matplotlib.pyplot as plt

from mpl_toolkits.axes_grid.inset_locator import inset_axes

fig, ax = plt.subplots()

x1 = [0,1,2,2.05,2.10,3,4,5]
x2 = [0,1,2,2.05,2.10,3,4,5]

ax.scatter(x1,x2)

axin = ax.inset_axes([0.75, 0.1, 0.2, 0.2])

axin.set_xlim(1.9,2.2)
axin.set_ylim(1.9,2.2)

axin.scatter(x1,x2)

ax.indicate_inset_zoom(axin)

axin.set_yticklabels([])
axin.set_xticklabels([])

axin.set_yticks([])
axin.set_xticks([])

plt.title("How to create a zoom effect on a matplotlib figure ?")

plt.savefig('zoom_effect_matplotlib_4.png', dpi=100, bbox_inches='tight' )

plt.show()

Comment créer un effet de zoom sur une figure matplotlib en utilisant indicate_inset_zoom() ?
Comment créer un effet de zoom sur une figure matplotlib en utilisant indicate_inset_zoom() ?

Références

Image

of