पायथन मैटप्लोटलिब में 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')

यह मेरे लिए काम कर रहा है। क्या आप एक संपूर्ण कोड उदाहरण पोस्ट कर सकते हैं जो काम नहीं करता है? और क्या आप समझा सकते हैं कि क्या काम नहीं कर रहा है? क्या आप केवल समन स्केल चाहते हैं? या फिर वही रेंज?
जॉरिस

1
@ जॉरिस मूल रूप से मैं एक निश्चित वर्ग ग्राफ चाहता हूं। यहां तक ​​कि अगर मैं खिड़की को अधिकतम करता हूं, तो मुझे उम्मीद है कि SQUARE आरक्षित है। मेरी स्क्रीन चौड़ी है, जब मैं खिड़की को अधिकतम करता हूं, तो ग्राफ भी आयताकार हो जाता है। मैं चाहता हूं कि यह अभी भी SQUARE
Sibbs Gambling

फिर, क्या आप एक पूर्ण कोड उदाहरण पोस्ट कर सकते हैं। क्योंकि दिए गए उत्तर को ऐसा करना चाहिए, इसे एक वर्ग के रूप में संरक्षित करें। उसकी चौड़ाई या ऊँचाई को संरक्षित नहीं करते, बल्कि उसके आकार को बनाए रखते हैं।
जॉरिस

2
एसओ पर दूसरों के साथ बातचीत करते समय कृपया थोड़ा कम अपघर्षक होने की कोशिश करें। आपको लोगों की दयालुता से मदद मिल रही है, इसलिए थोड़ा कम हकदार हैं।
ताकसवेल

3 डी के लिए, आपको थोड़ा अतिरिक्त काम करना होगा: stackoverflow.com/questions/13685386/…
ट्रेवर बॉयड स्मिथ

जवाबों:


179

आपको इसे करने के लिए एपीआई में थोड़ा गहरा खुदाई करने की आवश्यकता है:

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_aspect


4
बहुत बढ़िया! यह वास्तव में आकर्षण की तरह काम करता है। क्या आप मुझे बता सकते हैं क्या plt.plot(range(5))और plt.gca().set_aspect('equal', adjustable='box'), अगर आप कोई आपत्ति नहीं है? इसके अलावा, मुझे लगता है कि अगर मेरे पास नहीं है plt.draw(), तो भी भूखंड अभी भी दिखाई देगा। फिर इसका क्या उपयोग है?
Sibbs जुआ

plotबस कुछ दिखाने के लिए है। set_aspectप्रलेखन लिंक को पढ़ने के लिए। यह drawसिर्फ यह सुनिश्चित करने के लिए है कि इसका प्रतिपादन किया जाए।
tacaswell

1
प्लॉट करने के लिए कुछ नकली डेटा होना चाहिए (यह एक सीधी रेखा प्लॉट किया जाना चाहिए)।
tacaswell

1
@ perfectionm1ng कोई चिंता नहीं है, मुझे यह पता लगाने में थोड़ा समय लगा कि आप क्या पूछ रहे थे।
tacaswell

1
क्या वास्तव में सीमाएं निर्दिष्ट किए बिना इसे पूरा करने का एक तरीका है? मैंने उम्मीद की होगी कि एक साधारण कमांड होने के लिए समान पैमाने के साथ एक चौकोर भूखंड मिलेगा और दोनों अक्षों के लिए टिक होगा। धन्यवाद
चकित

70
plt.axis('scaled')

मेरे लिए अच्छा काम करता है।


मेरे लिए भी काम किया। बस सीमा / टिक सेट करने से पहले इसका उपयोग करना सुनिश्चित करें, क्योंकि यह स्वचालित रूप से पुनर्विक्रय करेगा।
एंड्रयू

3
क्षमा करें, plt.axis ('स्केल्ड') ने मेरे लिए Python 3.7 और matplotlib - matplotlib == 3.1.0 में काम नहीं किया। हालाँकि, plt.axis ('स्क्वायर') ने काम किया!
ऋषि जैन

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', तो कथानक चौकोर हो जाता है।
एवगेनी सर्गेव

मुझे निश्चित रूप से इससे चौकोर बॉक्स नहीं मिलता है।
पीटर ड्रेक

pylab को पदावनत किया जाता है
eric

19

देखें प्रलेखन पर plt.axis()। यह:

plt.axis('equal')

काम नहीं करता है क्योंकि यह अक्षों की सीमाओं को बदलता है ताकि मंडलियां गोलाकार दिखाई दें। आप क्या चाहते हैं:

plt.axis('square')

यह समान कुल्हाड़ियों के साथ एक चौकोर भूखंड बनाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.