docsから、アスペクト比は、X軸とY軸のデータ・ツー・ディスプレイスケーリング単位の比です。すなわち、y方向に1表示当たり10データ単位、x方向に表示単位当たり1データ単位がある場合、その比は1/10となる。円は背の高いものよりも10倍広くなります。これは、num
のアスペクトが以下を実行するという文に対応します。
サークルは、高さが幅のnum倍になるように伸びます。 aspect = 1はaspect = 'equal'と同じです。
あなたは(matplotlib.axes._base.adjust_aspect
, starting around line 1405)を見て、コードの同じオリジナル作品をもとに、私たちは限り、あなたは唯一の線形デカルト軸のこの比率を必要として、簡略化した式を考え出すことができると思います。極軸と対数軸では複雑になるので無視します。
式の繰り返しに:
(x_data_unit/x_display_unit)/(y_data_unit/y_display_unit)
これは、この最後の製剤は、の比によって分割された2つの方向の表示サイズのちょうど比で
(y_display_unit/x_display_unit)/(y_data_unit/x_data_unit)
と同じであることを起こりますxとyの制限。それは、実際のデータの境界ではなく、すべての軸の制限のために結果を返すためax.get_data_ratio
ががここでは適用されないことに注意してください:
from operator import sub
def get_aspect(ax):
# Total figure size
figW, figH = ax.get_figure().get_size_inches()
# Axis size on figure
_, _, w, h = ax.get_position().bounds
# Ratio of display units
disp_ratio = (figH * h)/(figW * w)
# Ratio of data units
# Negative over negative because of the order of subtraction
data_ratio = sub(*ax.get_ylim())/sub(*ax.get_xlim())
return disp_ratio/data_ratio
今度はそれをテストしてみましょう:
from matplotlib import pyplot as plt
fig, ax = plt.subplots()
ax.set_aspect('equal')
print('{} == {}'.format(ax.get_aspect(), get_aspect(ax)))
ax.set_aspect(10)
print('{} == {}'.format(ax.get_aspect(), get_aspect(ax)))
あなたはどのようなアスペクト比を参照して?データまたは表示? –
@フランクの答えに対するあなたのコメントに基づいて、私はディスプレイやもっと複雑なものを推測するつもりです。 –
残念ながら、@MadPhysicistは「もっと複雑なものです」。私の編集した質問を参照してください。 – askewchan