Python matplotlibでx軸とy軸のスケールを等しくする方法は?


128

正方形のグラフに線を描きたい。

スケールx-axisとはy-axis同じでなければなりません。

たとえば、xの範囲は0〜10で、画面上で10cmです。yも0〜10の範囲で、10 cmでなければなりません。

ウィンドウサイズをいじったとしても、正方形の形状を維持する必要があります。

現在、グラフはウィンドウサイズに合わせてスケーリングされます。

どうすればこれを達成できますか?

更新:

以下を試しましたがうまくいきませんでした。

plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.axis('equal')

それは私のために働いています。機能しないコード例全体を投稿できますか?そして、何がうまくいかないのか説明できますか?同じスケールだけが必要ですか?それとも同じ範囲ですか?
joris 2013

1
@joris基本的には、固定されたSQUAREグラフが必要です。ウィンドウを最大化しても、SQUAREが予約されていることを願っています。画面が広く、ウィンドウを最大化すると、グラフも長方形になります。私はそれがまだ
正方形である

繰り返しますが、完全なコード例を投稿できますか?与えられた答えはそれをするべきなので、それを正方形として保存します。幅や高さは維持しませんが、形状は維持します。
joris 2013

2
SOで他の人とやり取りするときは、少し研ぎ澄まさないようにしてください。あなたは人々の優しさから助けを得ているので、少し権利が少ない行動をとってください。
tacaswell 2013

3Dのために、あなたは少し余分な作業をしなければならない:stackoverflow.com/questions/13685386/...
トレバー・ボイド・スミス

回答:


179

これを行うには、APIを少し深く掘る必要があります。

from matplotlib import pyplot as plt
plt.plot(range(5))
plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.gca().set_aspect('equal', adjustable='box')
plt.draw()

set_aspectのドキュメント


4
驚くばかり!それは確かに魅力のように機能します。よろしければ、何plt.plot(range(5))plt.gca().set_aspect('equal', adjustable='box')して教えていただけますか?また、がない場合plt.draw()でも、プロットが表示されることに気づきました。それでそれの使用は何ですか?
Sibbsギャンブル2013

これplotは表示するものがあるだけです。以下のためset_aspectのドキュメントのリンクをお読みください。これdrawは、レンダリングされることを確認するためのものです。
tacaswell 2013

1
いくつかの偽のデータをプロットします(直線をプロットする必要があります)。
tacaswell 2013

1
@ perfectionm1ng心配しないで、あなたが何を求めているのかを理解するのに少し時間がかかりました。
tacaswell 2013

1
制限を正確に指定せずにこれを行う方法はありますか?私は、両方の軸の目盛りと目盛りが同じ正方形のプロットを取得する簡単なコマンドがあると予想していました。ありがとう
混乱

70
plt.axis('scaled')

私にとってはうまくいきます。


また私のために働いた。制限/ティックを設定する前にこれを使用してください。自動的に再スケーリングされます。
Andrew、

3
申し訳ありませんが、plt.axis( 'scaled')はPython 3.7およびmatplotlib-matplotlib == 3.1.0では機能しませんでしたが、plt.axis( 'square')は機能しました!
rishi jain

19

次のようなものを試してください:

import pylab as p
p.plot(x,y)
p.axis('equal')
p.show()

これは私のシステムで動作します。おそらく、作業しているコードの一部を表示できますか?問題をより迅速に解決できる可能性があります。
Dman2 2013

これは一般的には機能しません。軸は同じですが、プロットウィンドウも正方形でない限り、プロットは正方形ではありません。Matplotlib 2.0でテスト
divenex

P.axis('equal')のようP.gca().set_aspect('equal', adjustable='datalim')です。一方、の場合adjustable='box'、プロットは正方形になります。
Evgeni Sergeev 2018年

これからは四角い箱絶対に出ません
Peter Drake

pylabは非推奨
エリック

19

のドキュメントを参照してくださいplt.axis()。この:

plt.axis('equal')

円が円形に見えるように軸の範囲を変更するため、機能しません。あなたが欲しいのは:

plt.axis('square')

これにより、軸が等しい正方形のプロットが作成されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.