Noter
Cliquez ici pour télécharger l'exemple de code complet
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)
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.colorbar
avec 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)
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')
<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)
Une façon de contourner ce problème consiste à utiliser un Axes.inset_axes
pour 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()
Durée totale d'exécution du script : (0 minutes 4,244 secondes)