Introduction
Ce tutoriel montrera comment utiliser ImageGrid de Matplotlib pour créer une grille d'images avec des axes x et y partagés. Le tutoriel couvrira deux démonstrations :
- La démonstration 1 montre comment ajouter une barre de couleur à chaque axe.
- La démonstration 2 montre comment ajouter une barre de couleur partagée.
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 pratiquer.
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.
Importez les bibliothèques nécessaires
Nous utiliserons ImageGrid de Matplotlib pour créer la grille d'images. Nous utiliserons également numpy pour générer des données d'échantillonnage et cbook pour accéder à un ensemble de données d'échantillonnage.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cbook
from mpl_toolkits.axes_grid1 import ImageGrid
Définissez une fonction pour ajouter des titres intérieurs aux axes
La fonction add_inner_title sera utilisée pour ajouter des titres aux images.
def add_inner_title(ax, title, loc, **kwargs):
from matplotlib.offsetbox import AnchoredText
from matplotlib.patheffects import withStroke
prop = dict(path_effects=[withStroke(foreground='w', linewidth=3)],
size=plt.rcParams['legend.fontsize'])
at = AnchoredText(title, loc=loc, prop=prop,
pad=0., borderpad=0.5,
frameon=False, **kwargs)
ax.add_artist(at)
return at
Préparez les données d'échantillonnage
Nous utiliserons la fonction get_sample_data de cbook pour obtenir des données d'échantillonnage. Nous préparerons ensuite les images à afficher dans la grille.
Z = cbook.get_sample_data("axes_grid/bivariate_normal.npy")
extent = (-3, 4, -4, 3)
ZS = [Z[i::3, :] for i in range(3)]
extent = extent[0], extent[1]/3., extent[2], extent[3]
Démo 1 - Barre de couleur sur chaque axe
Nous allons créer une grille de 3 images avec une barre de couleur sur chaque axe en utilisant le code suivant :
grid = ImageGrid(
fig, 211, nrows_ncols=(1, 3), axes_pad=0.05, label_mode="1", share_all=True,
cbar_location="top", cbar_mode="each", cbar_size="7%", cbar_pad="1%")
grid[0].set(xticks=[-2, 0], yticks=[-2, 0, 2])
for i, (ax, z) in enumerate(zip(grid, ZS)):
im = ax.imshow(z, origin="lower", extent=extent)
cb = ax.cax.colorbar(im)
## Changing the colorbar ticks
if i in [1, 2]:
cb.set_ticks([-1, 0, 1])
for ax, im_title in zip(grid, ["Image 1", "Image 2", "Image 3"]):
add_inner_title(ax, im_title, loc='lower left')
- Nous créons une grille de 3 images en utilisant
ImageGrid. - Nous définissons le
cbar_modesur "each" pour ajouter une barre de couleur sur chaque axe. - Nous définissons le paramètre
share_allsur True pour partager les axes x et y entre toutes les images. - Nous définissons le paramètre
cbar_locationsur "top" pour positionner les barres de couleur en haut. - Nous définissons les
xtickset lesytickspour la première image. - Nous parcourons chaque image et ajoutons l'image à l'axe en utilisant
imshow. - Nous ajoutons une barre de couleur à chaque axe en utilisant
ax.cax.colorbar. - Nous définissons les repères de la barre de couleur pour la deuxième et la troisième images.
- Nous ajoutons un titre à chaque image en utilisant
add_inner_title.
Démo 2 - Barre de couleur partagée
Nous allons créer une grille de 3 images avec une barre de couleur partagée en utilisant le code suivant :
grid2 = ImageGrid(
fig, 212, nrows_ncols=(1, 3), axes_pad=0.05, label_mode="1", share_all=True,
cbar_location="right", cbar_mode="single", cbar_size="10%", cbar_pad=0.05)
grid2[0].set(xlabel="X", ylabel="Y", xticks=[-2, 0], yticks=[-2, 0, 2])
clim = (np.min(ZS), np.max(ZS))
for ax, z in zip(grid2, ZS):
im = ax.imshow(z, clim=clim, origin="lower", extent=extent)
## With cbar_mode="single", cax attribute of all axes are identical.
ax.cax.colorbar(im)
for ax, im_title in zip(grid2, ["(a)", "(b)", "(c)"]):
add_inner_title(ax, im_title, loc='upper left')
- Nous créons une grille de 3 images en utilisant
ImageGrid. - Nous définissons le
cbar_modesur "single" pour ajouter une barre de couleur partagée. - Nous définissons le paramètre
share_allsur True pour partager les axes x et y entre toutes les images. - Nous définissons le paramètre
cbar_locationsur "right" pour positionner la barre de couleur à droite. - Nous définissons les
xtickset lesytickspour la première image. - Nous parcourons chaque image et ajoutons l'image à l'axe en utilisant
imshow. - Nous définissons le paramètre
climpour vous assurer que toutes les images utilisent la même échelle de couleur. - Nous ajoutons une barre de couleur partagée à l'axe en utilisant
ax.cax.colorbar. - Nous ajoutons un titre à chaque image en utilisant
add_inner_title.
Affichez la figure
Nous utiliserons plt.show() pour afficher la figure.
plt.show()
Sommaire
Ce tutoriel a démontré comment utiliser ImageGrid de Matplotlib pour créer une grille d'images avec des axes x et y partagés. Nous avons couvert deux démonstrations : la Démo 1 a montré comment ajouter une barre de couleur sur chaque axe, et la Démo 2 a montré comment ajouter une barre de couleur partagée.