Placer les barres de couleur #

Les barres de couleur indiquent l'étendue quantitative des données d'image. Les placer dans une figure n'est pas trivial car il faut leur faire de la place.

Le cas le plus simple consiste simplement à attacher une barre de couleurs à chaque axe :

import matplotlib.pyplot as plt
import numpy as np


# Fixing random state for reproducibility
np.random.seed(19680801)

fig, axs = plt.subplots(2, 2)
cmaps = ['RdBu_r', 'viridis']
for col in range(2):
    for row in range(2):
        ax = axs[row, col]
        pcm = ax.pcolormesh(np.random.random((20, 20)) * (col + 1),
                            cmap=cmaps[col])
        fig.colorbar(pcm, ax=ax)
placement de la barre de couleur

La première colonne a le même type de données dans les deux lignes, il peut donc être souhaitable de combiner la barre de couleurs que nous faisons en appelant Figure.colorbaravec une liste d'axes au lieu d'un seul axe.

fig, axs = plt.subplots(2, 2)
cmaps = ['RdBu_r', 'viridis']
for col in range(2):
    for row in range(2):
        ax = axs[row, col]
        pcm = ax.pcolormesh(np.random.random((20, 20)) * (col + 1),
                            cmap=cmaps[col])
    fig.colorbar(pcm, ax=axs[:, col], shrink=0.6)
placement de la barre de couleur

Des dispositions de barres de couleurs relativement compliquées sont possibles en utilisant ce paradigme. Notez que cet exemple fonctionne beaucoup mieux avec constrained_layout=True

fig, axs = plt.subplots(3, 3, constrained_layout=True)
for ax in axs.flat:
    pcm = ax.pcolormesh(np.random.random((20, 20)))

fig.colorbar(pcm, ax=axs[0, :2], shrink=0.6, location='bottom')
fig.colorbar(pcm, ax=[axs[0, 2]], location='bottom')
fig.colorbar(pcm, ax=axs[1:, :], location='right', shrink=0.6)
fig.colorbar(pcm, ax=[axs[2, 1]], location='left')
placement de la barre de couleur
<matplotlib.colorbar.Colorbar object at 0x7f2cfb43f070>

Barres de couleurs avec axes à rapport hauteur/largeur fixe #

Placer des barres de couleur pour les axes avec un rapport d'aspect fixe pose un défi particulier car les axes parents changent de taille en fonction de la vue des données.

fig, axs = plt.subplots(2, 2,  constrained_layout=True)
cmaps = ['RdBu_r', 'viridis']
for col in range(2):
    for row in range(2):
        ax = axs[row, col]
        pcm = ax.pcolormesh(np.random.random((20, 20)) * (col + 1),
                            cmap=cmaps[col])
        if col == 0:
            ax.set_aspect(2)
        else:
            ax.set_aspect(1/2)
        if row == 1:
            fig.colorbar(pcm, ax=ax, shrink=0.6)
placement de la barre de couleur

Une façon de contourner ce problème consiste à utiliser un Axes.inset_axespour localiser les axes dans les coordonnées des axes. Notez que si vous zoomez sur les axes et modifiez la forme des axes, la barre de couleurs changera également de position.

fig, axs = plt.subplots(2, 2, constrained_layout=True)
cmaps = ['RdBu_r', 'viridis']
for col in range(2):
    for row in range(2):
        ax = axs[row, col]
        pcm = ax.pcolormesh(np.random.random((20, 20)) * (col + 1),
                            cmap=cmaps[col])
        if col == 0:
            ax.set_aspect(2)
        else:
            ax.set_aspect(1/2)
        if row == 1:
            cax = ax.inset_axes([1.04, 0.2, 0.05, 0.6])
            fig.colorbar(pcm, ax=ax, cax=cax)

plt.show()
placement de la barre de couleur

Durée totale d'exécution du script : (0 minutes 4,244 secondes)

Galerie générée par Sphinx-Gallery