Notiz
Klicken Sie hier , um den vollständigen Beispielcode herunterzuladen
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)
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.colorbar
mit 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)
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')
<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)
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()
Gesamtlaufzeit des Skripts: ( 0 Minuten 4,244 Sekunden)