/ / matplotlib:プロットの軸比を取得する - python、matplotlib

matplotlib:プロットの軸比率を取得する - python、matplotlib

いくつかの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.