2012-11-14 21 views
61

私は、3Dデータセットを通してスライスと投影を視覚化するソフトウェアシステムを作成しています。私はmatplotlibと具体的にはimshowを使用して、分析コードから取得した画像バッファを視覚化しています。Imshow:extentとaspect

画像にプロット軸を注釈したいので、imshowが画像バッファーのピクセル座標をデータ空間座標系にマップするためのエクステントキーワードを使用します。

残念ながら、matplotlibはユニットについて認識していません。私が1000 m X 1 kmというサイズの画像をプロットしたいと言ってください(人工的な例を挙げて)。その場合、範囲は[0, 1000, 0, 1]のようなものになります。画像配列は正方形であるにもかかわらず、エクステントキーワードが暗示するアスペクト比が1000であるため、結果のプロット軸のアスペクト比は1000になります。

プロットのアスペクト比を強制的に保持することは可能ですか自動的に生成された大目盛りとラベルは、エクステントキーワードを使用して取得できますか?

答えて

103

イメージのアスペクトを手動で設定する(または、図の範囲を埋めるように自動スケールする)ことで可能です。

デフォルトでは、imshowは、プロットのアスペクトを1に設定します。これは、多くの場合、イメージデータに必要なものです。あなたのケースでは

、あなたのような何かを行うことができます:

import matplotlib.pyplot as plt 
import numpy as np 

grid = np.random.random((10,10)) 

fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, figsize=(6,10)) 

ax1.imshow(grid, extent=[0,100,0,1]) 
ax1.set_title('Default') 

ax2.imshow(grid, extent=[0,100,0,1], aspect='auto') 
ax2.set_title('Auto-scaled Aspect') 

ax3.imshow(grid, extent=[0,100,0,1], aspect=100) 
ax3.set_title('Manually Set Aspect') 

plt.tight_layout() 
plt.show() 

enter image description here

+3

どうもありがとう - 私は正方形の窓を回復するための側面を変更する必要があることに気づいていませんでした。私のプロットは今完璧に見える! – ngoldbaum

+0

偉大な答え - ありがとう! – zanbri

関連する問題