web-dev-qa-db-ja.com

左側/反対側のMatplotlibカラーバーの目盛り

次のように垂直カラーバーを生成できます(簡略化):

import matplotlib.pyplot as plt
import matplotlib as mpl

plt.figure()
c_ax=plt.subplot(111)
cb = mpl.colorbar.ColorbarBase(c_ax,orientation='vertical')
plt.savefig('my_colorbar.png')

次のような結果になります(スペース上の理由で回転): enter image description here

反対側の目盛りラベルを取得することは可能ですか?

17
M.T

ティックの位置はc_ax.yaxis.set_ticks_position()を使用して切り替えることができます

だからあなたの例では:

import matplotlib.pyplot as plt
import matplotlib as mpl

plt.viridis()

fig=plt.figure()
c_ax=plt.subplot(199)

cb = mpl.colorbar.ColorbarBase(c_ax,orientation='vertical')

c_ax.yaxis.set_ticks_position('left')

plt.savefig('my_colorbar.png')

enter image description here

同様の方法でカラーバーラベルを移動することもできます。

c_ax.yaxis.set_label_position('left')

最後に、水平カラーバーがあり、目盛りとラベルを上に移動したい場合は、xaxisで同等の関数を使用できます。

c_ax.xaxis.set_label_position('top')
c_ax.xaxis.set_ticks_position('top')
25
tmdavison

私も同じ問題を抱えていました。この状況は、カラーバーの軸を明示的に設定しているときにおそらく発生します。その場合、これらの軸のどちら側に目盛りとラベルを取得するかを簡単に指定できます。たとえば、imshowを使用してイメージを作成した場合

fig = plt.figure()
ax = plt.subplot(1, 1, 1)
im = ax.imshow(data)

この例では、inset_axesを使用して、カラーバーの軸を定義できます。

from mpl_toolkits.axes_grid1.inset_locator import inset_axes
cbaxes = inset_axes(ax, width="7%", height="20%", loc=4)

次に、カラーバーを追加します

cb = fig.colorbar(im, cax=cbaxes, ticks=[vmin, vmax], orientation='vertical')

ティックの位置などを制御します...

cbaxes.yaxis.tick_left()
0