Colocación de barras de colores #

Las barras de colores indican la extensión cuantitativa de los datos de la imagen. Colocar una figura no es trivial porque es necesario hacer espacio para ellos.

El caso más simple es simplemente adjuntar una barra de colores a cada eje:

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)
colocación de la barra de colores

La primera columna tiene el mismo tipo de datos en ambas filas, por lo que puede ser deseable combinar la barra de colores que hacemos llamando Figure.colorbarcon una lista de ejes en lugar de un solo eje.

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)
colocación de la barra de colores

Los diseños de barras de colores relativamente complicados son posibles utilizando este paradigma. Tenga en cuenta que este ejemplo funciona mucho mejor 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')
colocación de la barra de colores
<matplotlib.colorbar.Colorbar object at 0x7f2cfb43f070>

Barras de color con ejes de relación de aspecto fija #

La colocación de barras de colores para ejes con una relación de aspecto fija plantea un desafío particular, ya que los ejes principales cambian de tamaño según la vista de datos.

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)
colocación de la barra de colores

Una forma de evitar este problema es usar an Axes.inset_axespara ubicar los ejes en las coordenadas de los ejes. Tenga en cuenta que si acerca los ejes y cambia la forma de los ejes, la barra de colores también cambiará de posición.

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()
colocación de la barra de colores

Tiempo total de ejecución del script: (0 minutos 4.244 segundos)

Galería generada por Sphinx-Gallery