तीसरी बार आकर्षण। मेरा अनुमान है कि यह एक बग है और जेन्या का उत्तर बताता है कि यह नवीनतम संस्करण में तय किया गया है। मेरे पास संस्करण 0.99.1.1 है और मैंने निम्नलिखित समाधान बनाया है:
import matplotlib.pyplot as plt
import numpy as np
def forceAspect(ax,aspect=1):
im = ax.get_images()
extent = im[0].get_extent()
ax.set_aspect(abs((extent[1]-extent[0])/(extent[3]-extent[2]))/aspect)
data = np.random.rand(10,20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data)
ax.set_xlabel('xlabel')
ax.set_aspect(2)
fig.savefig('equal.png')
ax.set_aspect('auto')
fig.savefig('auto.png')
forceAspect(ax,aspect=1)
fig.savefig('force.png')
यह 'बल.पिंग' है:
नीचे मेरे असफल, अभी तक उम्मीद से जानकारीपूर्ण प्रयास हैं।
दूसरा उत्तर:
नीचे मेरा 'मूल उत्तर' ओवरकिल है, क्योंकि यह कुछ ऐसा ही करता है axes.set_aspect()
। मुझे लगता है कि आप उपयोग करना चाहते हैं axes.set_aspect('auto')
। मुझे समझ में नहीं आता कि यह मामला क्यों है, लेकिन यह मेरे लिए एक स्क्वायर इमेज प्लॉट तैयार करता है, उदाहरण के लिए यह स्क्रिप्ट:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(10,20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(data)
ax.set_aspect('equal')
fig.savefig('equal.png')
ax.set_aspect('auto')
fig.savefig('auto.png')
'समान' पहलू अनुपात के साथ एक छवि भूखंड का निर्माण करता है:
और 'ऑटो' पहलू अनुपात के साथ:
'मूल उत्तर' में नीचे दिया गया कोड स्पष्ट रूप से नियंत्रित पहलू अनुपात के लिए एक प्रारंभिक बिंदु प्रदान करता है, लेकिन एक बार इमोशो कहलाने के बाद इसे नजरअंदाज कर दिया जाता है।
मूल उत्तर:
यहां एक रूटीन का उदाहरण दिया गया है जो सबप्लॉट मापदंडों को समायोजित करेगा ताकि आपको वांछित पहलू अनुपात मिल सके:
import matplotlib.pyplot as plt
def adjustFigAspect(fig,aspect=1):
'''
Adjust the subplot parameters so that the figure has the correct
aspect ratio.
'''
xsize,ysize = fig.get_size_inches()
minsize = min(xsize,ysize)
xlim = .4*minsize/xsize
ylim = .4*minsize/ysize
if aspect < 1:
xlim *= aspect
else:
ylim /= aspect
fig.subplots_adjust(left=.5-xlim,
right=.5+xlim,
bottom=.5-ylim,
top=.5+ylim)
fig = plt.figure()
adjustFigAspect(fig,aspect=.5)
ax = fig.add_subplot(111)
ax.plot(range(10),range(10))
fig.savefig('axAspect.png')
यह इस तरह एक आंकड़ा पैदा करता है:
मैं कल्पना कर सकता हूं कि यदि आपके आंकड़े के भीतर कई सबप्लॉट हैं, तो आप प्रदान किए गए रूटीन में y और x सबप्लॉट की संख्या को कीवर्ड पैरामीटर (प्रत्येक में डिफ़ॉल्ट रूप से 1) में शामिल करना चाहते हैं। तो फिर उन संख्याओं और का उपयोग कर hspace
और wspace
कीवर्ड, आप सभी subplots सही पहलू अनुपात बना सकते हैं।
ax.axis('equal')
, संयोग से? जैसा कि सभी ने कहा, आपको क्या करना चाहिए, लेकिनax.axis
वर्कअराउंड के लिए प्रयास करने के लिए एक और मार्ग हो सकता है।