Farbbalken platzieren #

Farbbalken zeigen den quantitativen Umfang der Bilddaten an. Das Platzieren einer Figur ist nicht trivial, da Platz für sie geschaffen werden muss.

Der einfachste Fall ist das Anbringen eines Farbbalkens an jeder Achse:

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)
Farbbalkenplatzierung

Die erste Spalte enthält in beiden Zeilen denselben Datentyp, daher kann es wünschenswert sein, den Farbbalken zu kombinieren, was wir durch Aufrufen Figure.colorbarmit einer Liste von Achsen anstelle einer einzelnen Achse tun.

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)
Farbbalkenplatzierung

Mit diesem Paradigma sind relativ komplizierte Farbbalken-Layouts möglich. Beachten Sie, dass dieses Beispiel viel besser mit funktioniert 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')
Farbbalkenplatzierung
<matplotlib.colorbar.Colorbar object at 0x7f2cfb43f070>

Farbbalken mit Achsen mit festem Seitenverhältnis #

Das Platzieren von Farbbalken für Achsen mit festem Seitenverhältnis stellt eine besondere Herausforderung dar, da die übergeordneten Achsen je nach Datenansicht ihre Größe ändern.

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)
Farbbalkenplatzierung

Eine Möglichkeit, dieses Problem zu umgehen, besteht darin, ein zu verwenden Axes.inset_axes, um die Achsen in Achsenkoordinaten zu lokalisieren. Beachten Sie, dass sich beim Vergrößern der Achsen und Ändern der Form der Achsen auch die Position des Farbbalkens ändert.

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()
Farbbalkenplatzierung

Gesamtlaufzeit des Skripts: ( 0 Minuten 4,244 Sekunden)

Galerie generiert von Sphinx-Gallery