公式ガイドからplt.imshow()
、アスペクトが軸のアスペクト比を制御することがわかります。私の言葉では、アスペクトは正確にx単位とy単位の比率です。意図せずに数字を歪めたくないので、ほとんどの場合、1のままにしておきます。ただし、実際には、アスペクトを1以外の値で指定する必要がある場合があります。質問者は、x軸とy軸の物理単位が異なる可能性があるという良い例を示しました。xがkmで、yがmであると仮定しましょう。したがって、10x10データの場合、範囲は[0,10km、0,10m] = [0、10000m、0、10m]である必要があります。このような場合、デフォルトのアスペクト= 1を使い続けると、フィギュアの品質は非常に悪くなります。したがって、アスペクト= 1000を指定して、図を最適化できます。次のコードは、この方法を示しています。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
rng=np.random.RandomState(0)
data=rng.randn(10,10)
plt.imshow(data, origin = 'lower', extent = [0, 10000, 0, 10], aspect = 1000)
それでも、質問者の要求を満たすことができる代替案があると思います。範囲を[0,10,0,10]として設定し、単位を示すためにxy軸ラベルを追加するだけです。次のようにコーディングします。
plt.imshow(data, origin = 'lower', extent = [0, 10, 0, 10])
plt.xlabel('km')
plt.ylabel('m')
正しい数字を作るために、私たちは常にそれと、を心に留めておく必要がありx_max-x_min = x_res * data.shape[1]
ます。デフォルトでは、、は単位ピクセルが正方形であることを意味します。このデフォルトの動作は、値が異なるx_resとy_resでも正常に機能します。前の例を拡張して、x_resが1.5で、y_resが1であると仮定します。したがって、エクステントは[0,15,0,10]に等しくなります。デフォルトのアスペクトを使用すると、長方形のカラーピクセルを使用できますが、単位ピクセルは正方形のままです。y_max - y_min = y_res * data.shape[0]
extent = [x_min, x_max, y_min, y_max]
aspect = 1
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10])
# Or we have similar x_max and y_max but different data.shape, leading to different color pixel res.
data=rng.randn(10,5)
plt.imshow(data, origin = 'lower', extent = [0, 5, 0, 5])
カラーピクセルのアスペクトはですx_res / y_res
。そのアスペクトを単位ピクセルのアスペクトに設定すると(つまりaspect = x_res / y_res = ((x_max - x_min) / data.shape[1]) / ((y_max - y_min) / data.shape[0])
)、常に正方形のカラーピクセルが得られます。x軸の単位がy軸の単位の1.5倍になるように、アスペクト= 1.5を変更できます。これにより、正方形のカラーピクセルと正方形の全体像が得られますが、長方形のピクセル単位になります。どうやら、それは通常受け入れられていません。
data=rng.randn(10,10)
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10], aspect = 1.5)
最も望ましくないケースは、アスペクトを1.2などの任意の値に設定することです。これにより、正方形の単位ピクセルも正方形のカラーピクセルも生成されません。
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10], aspect = 1.2)
簡単に言えば、正しい範囲を設定し、matplotlibに残りの処理を任せるだけで十分です(x_res!= y_resであっても)!必要な場合にのみアスペクトを変更してください。