x 軸と y 軸が対数であるデータの行列があります。imshow
マトリックスを表示するために使用しようとしていますが、対数軸が必要なので、imshow
軸の目盛りを に設定し[]
、別の軸セットをオーバーレイします。
import matplotlib.pyplot as plt
import numpy as np
# the x,y max and min are the log values
array = np.zeros((2,2))
array[1,1] = -1
fig = plt.figure()
ax = plt.imshow(
array,
extent = (0,1, 1, 0),
interpolation = 'nearest').get_axes()
ax.invert_yaxis()
# add a colorbar
# cb = plt.colorbar() # <----- THIS CAUSES TROUBLE
# cb.set_label('zbar')
ax.set_aspect(1)
ax.xaxis.set_ticks([])
ax.yaxis.set_ticks([])
position = ax.get_position()
aspect = ax.get_aspect()
# overlay another set of axes
ax_log = fig.add_subplot(111, frameon = False)
ax_log.set_xscale('log')
ax_log.set_yscale('log')
ax_log.axis((10**0, 10**1, 10**0, 10**1)) # old min and max but exponentiated
ax_log.set_position(position)
ax_log.set_aspect(aspect)
plt.savefig('test.png', bbox_inches = 'tight')
plt.close()
カラーバーなしでこれはうまくいきます:
しかし、カラーバーを追加する行のコメントを外すと、奇妙なシフトが発生します:
カラーバーがどういうわけか画像を少し左にシフトしているように見えますが、get_position()
カラーバーを作成した後に呼び出していることを考えると、これは奇妙に思えます。このプロットを作成する簡単な方法を見落としていますか? 簡単な修正はありますか?