カラーバーの配置#

カラーバーは、画像データの量的な範囲を示します。図に配置することは簡単ではありません。

最も単純なケースは、各軸にカラーバーを付けるだけです:

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)
カラーバーの配置

Figure.colorbar最初の列には両方の行に同じタイプのデータがあるため、単一の軸ではなく軸のリストを呼び出してカラーバーを組み合わせることが望ましい場合があります 。

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)
カラーバーの配置

このパラダイムを使用すると、比較的複雑なカラーバー レイアウトが可能になります。この例は、 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>

固定縦横比の軸を持つカラーバー#

縦横比が固定された軸にカラーバーを配置することは、データ ビューに応じて親軸のサイズが変化するため、特定の課題をもたらします。

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)
カラーバーの配置

この問題を回避する 1 つの方法は、 を使用しAxes.inset_axesて、軸座標で軸を特定することです。軸を拡大して軸の形状を変更すると、カラーバーの位置も変わることに注意してください。

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()
カラーバーの配置

スクリプトの合計実行時間: ( 0 分 4.244 秒)

Sphinx-Gallery によって生成されたギャラリー