Bagaimana cara menyamakan skala sumbu x dan sumbu y dengan Python matplotlib?

128

Saya ingin menggambar garis pada grafik persegi.

Skala x-axisdan y-axisharus sama.

misalnya x berkisar dari 0 hingga 10 dan itu adalah 10cm di layar. y juga harus berkisar dari 0 sampai 10 dan harus juga 10 cm.

Bentuk persegi harus dipertahankan, meskipun saya main-main dengan ukuran jendela.

Saat ini, grafik saya berskala bersama dengan ukuran jendela.

Bagaimana saya bisa mencapai ini?

MEMPERBARUI:

Saya mencoba yang berikut ini, tetapi tidak berhasil.

plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.axis('equal')
Perjudian Saudara
sumber
Ini berhasil untuk saya. Bisakah Anda memposting seluruh contoh kode yang tidak berfungsi? Dan dapatkah Anda menjelaskan apa yang tidak berhasil? Apakah Anda hanya menginginkan skala samen? Atau juga kisaran yang sama?
joris
1
@joris pada dasarnya saya ingin grafik KOTAK tetap. Bahkan jika saya memaksimalkan jendelanya, saya berharap KOTAK itu dipesan. Layar saya lebar, setelah saya maksimalkan jendela, grafiknya juga menjadi persegi panjang. Saya ingin tetap SQUARE
Sibbs Gambling
Sekali lagi, dapatkah Anda memposting contoh kode lengkap. Karena jawaban yang diberikan harus seperti itu, pertahankan sebagai persegi. Bukan menjaga lebar atau tinggi, tapi mempertahankan bentuknya.
joris
2
Cobalah untuk tidak terlalu kasar saat berinteraksi dengan orang lain di SO. Anda mendapatkan bantuan dari kebaikan orang-orang, jadi bersikaplah kurang tepat.
tacaswell
untuk 3d, Anda harus melakukan sedikit pekerjaan ekstra: stackoverflow.com/questions/13685386/…
Trevor Boyd Smith

Jawaban:

179

Anda perlu menggali lebih dalam api untuk melakukan ini:

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()

doc untuk set_aspect

tacaswell.dll
sumber
4
Hebat! Ini memang bekerja seperti pesona. Bisakah Anda memberi tahu saya apa plt.plot(range(5))dan plt.gca().set_aspect('equal', adjustable='box')lakukan, jika Anda tidak keberatan? Juga, saya perhatikan bahwa meskipun saya tidak punya plt.draw(), plotnya akan tetap muncul. Lalu apa gunanya?
Sibbs Gambling
yang plothanya memiliki sesuatu untuk menunjukkan. Untuk set_aspectmembaca tautan dokumentasi. Ini drawhanya untuk memastikan itu diberikan.
tacaswell
1
untuk memiliki beberapa data palsu untuk dipetakan (seharusnya membuat plot garis lurus).
tacaswell
1
@ perfectionm1ng jangan khawatir, butuh beberapa saat untuk mencari tahu apa yang Anda tanyakan.
tacaswell
1
Adakah cara untuk menyelesaikan ini tanpa harus menentukan batasan secara tepat? Saya berharap akan ada perintah sederhana untuk mendapatkan plot persegi dengan skala dan tanda centang yang sama untuk kedua sumbu. Terima kasih
Bingung
70
plt.axis('scaled')

bekerja dengan baik untuk saya.

myx
sumber
Juga bekerja untuk saya. Pastikan untuk menggunakan ini sebelum menetapkan batas / kutu, karena akan mengubah skala secara otomatis.
Andrew
3
Maaf, plt.axis ('scaled') tidak berfungsi untuk saya di Python 3.7 dan matplotlib - matplotlib == 3.1.0 Namun, plt.axis ('square') berfungsi!
rishi jain
19

Cobalah sesuatu seperti:

import pylab as p
p.plot(x,y)
p.axis('equal')
p.show()
Dman2
sumber
Ini berfungsi di sistem saya, mungkin Anda dapat menunjukkan sebagian dari kode yang sedang Anda kerjakan? Mungkin dapat membantu menyelesaikan masalah lebih cepat.
Dman2
Ini TIDAK bekerja secara umum. Sumbu-sumbu tersebut sama, tetapi plotnya tidak persegi, kecuali jendela plot juga persegi. Diuji dengan Matplotlib 2.0
divenex
P.axis('equal')sepertinya P.gca().set_aspect('equal', adjustable='datalim'). Sedangkan jika adjustable='box', maka plotnya menjadi persegi.
Evgeni Sergeev
Saya pasti tidak mendapatkan kotak persegi dari ini.
Peter Drake
pylab tidak digunakan lagi
eric
19

Lihat dokumentasi di plt.axis(). Ini:

plt.axis('equal')

tidak berfungsi karena ini mengubah batas sumbu untuk membuat lingkaran tampak melingkar. Yang Anda inginkan adalah:

plt.axis('square')

Ini membuat plot persegi dengan sumbu yang sama.

Adam Stewart
sumber