Observação
Clique aqui para baixar o código de exemplo completo
Colocando Barras de Cores #
As barras de cores indicam a extensão quantitativa dos dados da imagem. A colocação em uma figura não é trivial porque é necessário criar espaço para eles.
O caso mais simples é apenas anexar uma barra de cores a cada eixo:
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)
A primeira coluna tem o mesmo tipo de dados em ambas as linhas, portanto, pode ser desejável combinar a barra de cores que fazemos chamando
Figure.colorbar
com uma lista de eixos em vez de um único eixo.
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)
Layouts de barra de cores relativamente complicados são possíveis usando esse paradigma. Observe que este exemplo funciona muito melhor com
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>
Barras de cores com eixos de proporção fixa #
A colocação de barras de cores para eixos com uma proporção fixa representa um desafio particular, pois os eixos pais mudam de tamanho dependendo da exibição de dados.
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)
Uma maneira de contornar esse problema é usar um Axes.inset_axes
para localizar os eixos nas coordenadas dos eixos. Observe que se você aumentar o zoom nos eixos e alterar a forma dos eixos, a barra de cores também mudará de posição.
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 total de execução do script: ( 0 minutos 4,244 segundos)