Démos Matplotlib ImageGrid pour des axes partagés

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

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_mode sur "each" pour ajouter une barre de couleur sur chaque axe.
  • Nous définissons le paramètre share_all sur True pour partager les axes x et y entre toutes les images.
  • Nous définissons le paramètre cbar_location sur "top" pour positionner les barres de couleur en haut.
  • Nous définissons les xticks et les yticks pour 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_mode sur "single" pour ajouter une barre de couleur partagée.
  • Nous définissons le paramètre share_all sur True pour partager les axes x et y entre toutes les images.
  • Nous définissons le paramètre cbar_location sur "right" pour positionner la barre de couleur à droite.
  • Nous définissons les xticks et les yticks pour la première image.
  • Nous parcourons chaque image et ajoutons l'image à l'axe en utilisant imshow.
  • Nous définissons le paramètre clim pour 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.