・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)について
ちゃんと書かれております(当たり前やーーー)
これの左下のグラフが上の段落で紹介させてもらった手法で書いたグラフで
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について書かせてもらいました。
皆様の参考になれば嬉しいです。