Nota
Fare clic qui per scaricare il codice di esempio completo
Posizionamento delle barre dei colori #
Le barre colorate indicano l'estensione quantitativa dei dati dell'immagine. Il posizionamento in una figura non è banale perché è necessario fare spazio per loro.
Il caso più semplice è semplicemente collegare una barra dei colori a ciascun asse:
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 prima colonna ha lo stesso tipo di dati in entrambe le righe, quindi potrebbe essere desiderabile combinare la barra dei colori che facciamo chiamando
Figure.colorbar
con un elenco di assi invece di un singolo asse.
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)
Utilizzando questo paradigma sono possibili layout di barre dei colori relativamente complicati. Si noti che questo esempio funziona molto meglio con
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>
Barre colore con assi a proporzioni fisse #
Il posizionamento delle barre dei colori per gli assi con proporzioni fisse rappresenta una sfida particolare in quanto le dimensioni degli assi principali cambiano a seconda della visualizzazione dei dati.
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)
Un modo per aggirare questo problema è utilizzare an Axes.inset_axes
per individuare gli assi nelle coordinate degli assi. Si noti che se si esegue lo zoom avanti sugli assi e si modifica la forma degli assi, anche la barra dei colori cambierà posizione.
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()
Tempo di esecuzione totale dello script: (0 minuti 4,244 secondi)