本サイトは広告・プロモーションが含まれています
Python

【困り事メモ】matplotlibのcolorbarの大きさの調整 【Python】

この記事はこんな人におすすめ

・matplotlibのカラーバーの調整方法を知りたい方
・Python、とくにmatplotlibのコードの書き方の幅を増やしたい方
など

どうもこんにちは。
コンです。

大学の課題や、会社の資料作りでmatplotlibを使ってグラフを書く時こんな感じのグラフになっていないでしょうか??

ヒートマップ大きさとカラーバーの大きさが全然違いますよね。
今回はこのカラーバーの修正方法について、書いていきます。

解決方法:make_axes_locatable


こんな感じで、ヒートマップの大きさとカラーバーの大きさを同じにしたいですよね。

上のグラフの画像を出力したPythonコードは以下のようになります。

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize
from mpl_toolkits.axes_grid1 import make_axes_locatable

heatmap_data = np.random.randint(0, 255, (30, 100)) 
print(heatmap_data)

fig = plt.figure()
ax = fig.add_subplot(111)
im = ax.imshow(heatmap_data, cmap="gray")
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.1)
fig.colorbar(im, ax=ax, cax=cax, cmap="binary_r")

plt.show()
plt.close()

ポイントとしては

divider = make_axes_locatable(ax)
cax = divider.append_axes(“right”, size=”5%”, pad=0.1)
fig.colorbar(im, ax=ax, cax=cax, cmap=”binary_r”)

max_axes_locatable(ax), divider.append_axesの3つの設定が大切になります。

この記事でも3つの設定を使ってヒストグラムのカラーバーの大きさを調整しております。

公式サイトでの紹介

公式サイトでの該当しているドキュメントにも、max_axes_locatable(ax)について
ちゃんと書かれております(当たり前やーーー)

matplotlibより引用

これの左下のグラフが上の段落で紹介させてもらった手法で書いたグラフで

def demo_locatable_axes_easy(ax):
    from mpl_toolkits.axes_grid1 import make_axes_locatable
    divider = make_axes_locatable(ax)

    ax_cb = divider.append_axes("right", size="5%", pad=0.05)
    fig = ax.get_figure()
    fig.add_axes(ax_cb)

    Z, extent = get_demo_image()
    im = ax.imshow(Z, extent=extent)

    plt.colorbar(im, cax=ax_cb)
    ax_cb.yaxis.tick_right()
    ax_cb.yaxis.set_tick_params(labelright=False)

と書かれております。

こちらはax_cb.yaxis.set_tick_params(labelright=False)でカラーバーのメモリの表示を
消したりしてて、右側のグラフに重ならないように調整してあります。

おわりに

実はカラーバーを調整するのは

fig.colorbar(aximg, ax=ax, shrink=0.62)

と書く方法もあるのですが
これだと、グラフを書くたびに調整が必要で大変だろう、ということで
make_axes_locatableについて書かせてもらいました。

皆様の参考になれば嬉しいです。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA