Python matplotlib'de x ekseni ve y ekseni ölçekleri nasıl eşitlenir?


128

Kare bir grafik üzerine çizgiler çizmek istiyorum.

Ölçekleri x-axisve y-axisaynı olmalıdır.

örn. x, 0 ile 10 arasındadır ve ekranda 10 cm'dir. y ayrıca 0 ile 10 arasında olmalı ve ayrıca 10 cm olmalıdır.

Pencere boyutuyla uğraşsam bile kare şekli korunmalıdır.

Şu anda, grafiğim pencere boyutuyla birlikte ölçekleniyor.

Bunu nasıl başarabilirim?

GÜNCELLEME:

Aşağıdakini denedim ama işe yaramadı.

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

Benim için çalışıyor. Çalışmayan bir kod örneğinin tamamını gönderebilir misiniz? Ve neyin işe yaramadığını açıklayabilir misin? Sadece samen ölçeğini mi istiyorsun? Ya da aynı aralık mı?
joris

1
@joris temelde sabit bir KARE grafik istiyorum. Pencereyi büyütsem bile, KARE'nin ayrıldığını umuyorum. Ekranım geniş, pencereyi büyütüldükten sonra grafik de dikdörtgen oluyor. Hâlâ KARE olmasını istiyorum
Sibbs Gambling

Yine, tam bir kod örneği gönderebilir misiniz? Verilen cevabın bunu yapması gerektiğinden, onu kare olarak koruyun. Genişliğini veya yüksekliğini değil, şeklini koruyun.
joris

2
Lütfen SO'da başkalarıyla etkileşim kurarken biraz daha az aşındırıcı olmaya çalışın. İnsanların nezaketinden yardım alıyorsunuz, bu yüzden biraz daha az haklı davranın.
tacaswell 13

3 boyutlu için biraz fazladan iş yapmalısınız: stackoverflow.com/questions/13685386/…
Trevor Boyd Smith

Yanıtlar:


180

Bunu yapmak için api'de biraz daha derine inmeniz gerekir:

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 için doc


4
Müthiş! Gerçekten de cazibe gibi çalışıyor. Bana ne anlatır mısınız plt.plot(range(5))ve plt.gca().set_aspect('equal', adjustable='box')sakıncası yoksa, do? Ayrıca, elimde olmasa bile plt.draw(), arsanın yine de görüneceğini fark ettim . O zaman bunun faydası nedir?
Sibbs Gambling

plotSadece bir şey göstereceğiz edilir. İçin set_aspectbelge bağlantısını okuyun. drawSadece emin hale alır yapmaktır.
tacaswell

1
Çizilecek bazı sahte verilere sahip olmak (düz bir çizgi çizmiş olması gerekir).
tacaswell

1
@ perfectionm1ng endişelenme, ne sorduğunu anlamam biraz zaman aldı.
tacaswell

1
Tam olarak sınırları belirtmek zorunda kalmadan bunu yapmanın bir yolu var mı? Her iki eksen için aynı ölçek ve işaretlere sahip bir kare çizim elde etmek için basit bir komut olmasını beklerdim. Teşekkürler
Karışık

70
plt.axis('scaled')

benim için iyi çalışıyor.


Benim için de çalıştı. Otomatik olarak yeniden ölçeklendirileceği için, limitleri / işaretleri belirlemeden önce bunu kullandığınızdan emin olun.
Andrew

3
Pardon, plt.axis ('scaled') Python 3.7 ve matplotlib'de benim için çalışmadı - matplotlib == 3.1.0 Ancak, plt.axis ('square') çalıştı!
rishi jain

19

Şöyle bir şey dene:

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

Bu benim sistemimde çalışıyor, belki üzerinde çalıştığınız kodun bir kısmını gösterebilirsiniz? Sorunun daha hızlı çözülmesine yardımcı olabilir.
Dman2

Bu genel olarak ÇALIŞMAZ. Eksenler eşittir, ancak çizim penceresi de kare olmadığı sürece çizim kare değildir. Matplotlib 2.0 ile test edildi
divenex

P.axis('equal')gibi görünüyor P.gca().set_aspect('equal', adjustable='datalim'). Eğer iken adjustable='box', daha sonra arsa kare olur.
Evgeni Sergeev

Kesinlikle yapmak değil bunun dışında bir kare kutu olsun.
Peter Drake

pylab kullanımdan kaldırıldı
eric

19

Üzerindeki belgelere bakın plt.axis(). Bu:

plt.axis('equal')

çalışmaz çünkü dairelerin dairesel görünmesi için eksenin sınırlarını değiştirir. İstediğin şey:

plt.axis('square')

Bu, eşit eksenlere sahip bir kare çizim oluşturur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.