web-dev-qa-db-ja.com

matplotlib.pyplot、プロットのアスペクト比を保持

多角形の座標がpolygon = [(x1、y1)、(x2、y2)、...]であると仮定すると、次のコードは多角形を表示します。

import matplotlib.pyplot as plt
plt.fill(*Zip(*polygon))
plt.show()

デフォルトでは、多角形(または他の図)がウィンドウ内に収まるようにアスペクト比を調整し、サイズ変更後も収まるように自動的に変更しようとしています。画像が歪んでいるかどうかを視覚的に推定しようとする場合を除いて、多くの場合、これは素晴らしいことです。アスペクト比を厳密に1:1に修正する方法は?

(ここで「アスペクト比」が正しい用語かどうかわかりません。そうでない場合は、X軸とY軸の両方に1:1スケールが必要なので、XとYの両方で(0、1)が正確になります同じサイズの画面スペース。ウィンドウのサイズを変更する場合でも、1:1に保つ必要があります。)

43
Headcrab

使用すると役立ちますか?

plt.axis('equal')
77
Olivier Verdier

プロットコマンドの一部としてこれを直接設定する方法はあると確信していますが、そのトリックは覚えていません。事後にそれを行うには、現在の軸を使用して、「set_aspect( 'equal')」でアスペクト比を設定できます。あなたの例では:

import matplotlib.pyplot as plt
plt.fill(*Zip(*polygon))
plt.axes().set_aspect('equal', 'datalim')
plt.show()

私はこれを常に使用していますが、matplotlib Webサイトの例からです。

18
user348863

pltを使用して「スケーリング」

最良の使用方法は次のとおりです。

 plt.axis('scaled')

サウロ・カストロが言ったように。等しいので、他の軸を変更せずに一方の軸の制限を変更することはできないため、すべての非正方形の図形に合わせたい場合、多くの空白ができます。

等しい

enter image description here

スケーリング済み

enter image description here

「等しい」単sing

または、 axes class を使用できます。

fig = plt.figure()
ax = figure.add_subplot(111)
ax.imshow(image)
ax.axes.set_aspect('equal')
10
G M

plt.axis('scaling')の改善。xlim()およびylim()を使用して軸を変更する場合は、より適切に機能します。

0
ledmike