จะทำให้สเกลของแกน x และแกน y เท่ากันใน Python matplotlib ได้อย่างไร?


128

ฉันต้องการวาดเส้นบนกราฟสี่เหลี่ยม

ตาชั่งx-axisและy-axisควรจะเหมือนกัน

เช่น x อยู่ในช่วง 0 ถึง 10 และมีขนาด 10 ซม. บนหน้าจอ y ต้องอยู่ในช่วง 0 ถึง 10 และต้องสูงถึง 10 ซม. ด้วย

รูปทรงสี่เหลี่ยมต้องได้รับการดูแลแม้ว่าฉันจะยุ่งกับขนาดหน้าต่างก็ตาม

ขณะนี้กราฟของฉันสเกลร่วมกับขนาดหน้าต่าง

ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร

UPDATE:

ฉันลองทำตามขั้นตอนต่อไปนี้ แต่ไม่ได้ผล

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

มันทำงานให้ฉัน คุณสามารถโพสต์ตัวอย่างโค้ดทั้งหมดที่ใช้ไม่ได้หรือไม่? และคุณสามารถอธิบายสิ่งที่ไม่ทำงานได้หรือไม่? คุณต้องการเฉพาะสเกล Samen หรือไม่? หรือช่วงเดียวกันด้วย?
joris

1
@joris โดยพื้นฐานแล้วฉันต้องการกราฟ SQUARE คงที่ แม้ว่าฉันจะขยายหน้าต่างให้ใหญ่ที่สุดฉันหวังว่า SQUARE จะถูกสงวนไว้ หน้าจอของฉันกว้างหลังจากที่ฉันขยายหน้าต่างให้ใหญ่สุดกราฟจะกลายเป็นสี่เหลี่ยมด้วย ฉันต้องการให้มันยังคงเป็น SQUARE
Sibbs Gambling

อีกครั้งคุณสามารถโพสต์ตัวอย่างโค้ดแบบเต็ม เนื่องจากคำตอบที่กำหนดควรทำเช่นนั้นให้สงวนไว้เป็นรูปสี่เหลี่ยมจัตุรัส ไม่รักษาความกว้างหรือความสูง แต่รักษารูปร่างไว้
joris

2
โปรดพยายามขัดให้น้อยลงเมื่อมีปฏิสัมพันธ์กับผู้อื่นใน SO คุณได้รับความช่วยเหลือจากความกรุณาของผู้คนดังนั้นจงทำตัวให้น้อยลง
tacaswell

สำหรับ 3d คุณต้องทำงานพิเศษเล็กน้อย: stackoverflow.com/questions/13685386/…
Trevor Boyd Smith

คำตอบ:


180

คุณต้องเจาะลึกเข้าไปใน 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()

doc สำหรับ set_aspect


4
! น่ากลัว มันใช้งานได้เหมือนมีเสน่ห์ คุณช่วยกรุณาบอกฉันว่าplt.plot(range(5))และplt.gca().set_aspect('equal', adjustable='box')ทำถ้าคุณไม่ทราบ? นอกจากนี้ฉันสังเกตว่าแม้ว่าฉันจะไม่มีplt.draw()พล็อตก็ยังคงปรากฏขึ้น แล้วมันใช้อะไร?
Sibbs Gambling

plotเป็นเพียงการมีสิ่งที่จะแสดง สำหรับset_aspectลิงค์อ่านเอกสารประกอบ drawเป็นเพียงเพื่อให้แน่ใจว่าจะได้รับการแสดงผล
tacaswell

1
เพื่อให้มีข้อมูลปลอมที่จะพล็อต (ควรจะพล็อตเป็นเส้นตรง)
tacaswell

1
@ perfectionm1ng ไม่ต้องกังวลใช้เวลาสักพักเพื่อหาสิ่งที่คุณถาม
tacaswell

1
มีวิธีทำให้เสร็จโดยไม่ต้องระบุขีด จำกัด หรือไม่? ฉันคาดว่าจะมีคำสั่งง่ายๆในการรับพล็อตสี่เหลี่ยมที่มีมาตราส่วนเดียวกันและทำเครื่องหมายสำหรับทั้งสองแกน ขอบคุณ
สับสน

70
plt.axis('scaled')

ทำงานได้ดีสำหรับฉัน


ยังทำงานให้ฉัน เพียงตรวจสอบให้แน่ใจว่าได้ใช้สิ่งนี้ก่อนตั้งค่าขีด จำกัด / ขีดเนื่องจากจะทำการลดขนาดโดยอัตโนมัติ
Andrew

3
ขออภัย plt.axis ('scaled') ใช้งานไม่ได้สำหรับฉันใน Python 3.7 และ matplotlib - matplotlib == 3.1.0 อย่างไรก็ตาม plt.axis ('square') ใช้งานได้!
jain

19

ลองสิ่งที่ชอบ:

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

สิ่งนี้ใช้ได้กับระบบของฉันบางทีคุณอาจแสดงโค้ดบางส่วนที่คุณกำลังทำงานอยู่? อาจสามารถช่วยแก้ไขปัญหาได้เร็วขึ้น
Dman2

สิ่งนี้ใช้ไม่ได้โดยทั่วไป แกนเท่ากัน แต่พล็อตจะไม่เป็นสี่เหลี่ยมจัตุรัสเว้นแต่หน้าต่างการลงจุดจะเป็นสี่เหลี่ยม ทดสอบกับ Matplotlib 2.0
divenex

P.axis('equal')น่าจะเป็นเช่นP.gca().set_aspect('equal', adjustable='datalim')นั้น ในขณะที่ถ้าadjustable='box'พล็อตกลายเป็นสี่เหลี่ยมจัตุรัส
Evgeni Sergeev

ฉันไม่ได้รับกล่องสี่เหลี่ยมจากสิ่งนี้แน่นอน
Peter Drake

pylab เลิกใช้แล้ว
eric

19

ดูเอกสารplt.axis()บน นี้:

plt.axis('equal')

ใช้ไม่ได้เพราะมันเปลี่ยนขีด จำกัด ของแกนเพื่อทำให้วงกลมปรากฏเป็นวงกลม สิ่งที่คุณต้องการคือ:

plt.axis('square')

สิ่งนี้จะสร้างพล็อตสี่เหลี่ยมที่มีแกนเท่ากัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.