私は、3Dデータセットを通してスライスと投影を視覚化するソフトウェアシステムを書いています。 matplotlib
、特にimshow
を使用して、分析コードから取得した画像バッファーを視覚化します。
プロット軸で画像に注釈を付けたいので、imshow
が提供するextentキーワードを使用して、画像バッファのピクセル座標をデータ空間座標系にマッピングします。
残念ながら、matplotlib
は単位を知りません。 1000 m X 1 km
の寸法で画像をプロットしたい(人工的な例を挙げて)と言います。その場合、範囲は[0, 1000, 0, 1]
のようなものになります。画像配列は正方形ですが、extentキーワードで示されるアスペクト比は1000であるため、結果のプロット軸のアスペクト比も1000になります。
Extentキーワードを使用して取得した自動生成された主目盛とラベルを維持したまま、プロットのアスペクト比を強制することは可能ですか?
画像のアスペクトを手動で設定することにより(または、図の範囲を埋めるように自動スケーリングさせることにより)行うことができます。
デフォルトでは、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()