4

数値のコロバーを示す imshow グラフがあります。カラーバーはグラフよりもはるかに大きいです。できればグラフの縦横比に影響を与えずに、同じサイズになるようにスケーリングする方法はありますか?

grid = np.ma.array(grid, mask=np.isnan(grid))
plot.imshow(grid, interpolation='nearest', aspect='equal', vmax = private.vmax, vmin = private.vmin)
plot.minorticks_off()
plot.set_xticks(range(len(placex)))        
plot.set_yticks(range(len(placey)))
plot.set_xticklabels(placex)        
plot.set_yticklabels(placey, rotation = 0)
plot.colorbar()
plot.show()
4

1 に答える 1

4

matplotlibの組み込みメソッドのいずれかによってaxes-objectを指定し、それをカラーバーに使用できます。例:

import matplotlib.pyplot as plt
import numpy as np

ax2 = plt.subplot2grid((1,6), (0, 5), colspan=1)
ax1 = plt.subplot2grid((1,6), (0, 0), colspan=5)


plt.imshow(np.random.random((10,10)))
plt.colorbar(cax=ax2)

plt.show()

これにより、次のようになります。

サンプルコードのプロット

ただし、imshow-axesが非常にフラットになった場合(これが原因でaspect="equal"、これが発生する可能性があります)、これは役に立ちません。

そのような場合を処理したい場合は、次のいずれかを行うことができます

  1. グリッドのアスペクトに合わせてフィギュアのサイズを調整します。例:

     fig = figure(figsize=grid.shape[1]*1.5/dpi, grid.shape[0]/dpi)
    
  2. プロット後にax1の座標を読み取り、その直後に適切に変換された座標を使用してax2を作成し、カラーバーにax2を使用します。これは、ウィンドウのサイズを変更するときにうまく機能しませんが、画像ファイルとしてプロットを自動的に作成するだけでうまくいく可能性があります。

2.が必要な場合は、この例を追加できますが、これが必要なものであることが確実な場合にのみ、この作業を行います。

あいさつ、Thorsten

于 2013-01-03T09:22:44.593 に答える