いくつかの2Dデータセットの散布図を自動的に作成する必要があります。
デフォルトでは縦横比が設定されています ax.set_aspect(aspect="equal")
これはほとんどの場合うまくいきます。 x,y
値は多かれ少なかれ二乗領域に分布します。
しかし、時々、私は、でプロットされたときに、データセットに遭遇します。 equal
比率は、次のようになります。
すなわち:与えられた軸において狭すぎる。上の画像では、軸は約1:8です。
このような場合、縦横比は ax.set_aspect(aspect="auto")
より良いプロットになるでしょう。
今、私は設定したくない aspect="auto"
を使用しているため、すべてのデータセットのデフォルトとして aspect="equal"
実際には そのような散布図を表示する正しい方法.
私は使用にフォールバックする必要があります ax.set_aspect(aspect="auto")
上記のような場合のみ.
問題は、次のような場合にプロットの縦横比が狭すぎるかどうかを事前に知る方法があることです aspect="equal"
使用されている?プロットされたデータセットの実際の縦横比を取得するのと同じです。
このようにして、そのような数値に基づいて、アスペクト比をより見栄えの良いものに調整することができます auto
または他のアスペクト比)の代わりに "equal"
.
回答:
回答№1は4このようなことをするべきです、
aspect = (max(x) - min(x)) / (max(y) - min(y))
回答№2については2
ザ axes
方法 get_data_ratio
あなたのデータの境界の縦横比を与える 表示通り1
ax.get_data_ratio()
例えば:
M = 4.0
ax.set_aspect("equal" if 1/M < ax.get_data_ratio() < M else "auto")
¹これはの逆数です。 @farenorthの回答 軸がデータの周囲でズームされたとき max(y) == max(ax.get_ylim())
それはの範囲を使用して計算されるので ax.get_ybound
そして ax.get_xbound
.