python मैं matplotlib में पहलू अनुपात कैसे सेट कर सकते हैं?





2 Answers

आप matplotlib संस्करण क्या चल रहे हैं? मुझे हाल ही में 1.1.0 अपग्रेड करना पड़ा है, और इसके साथ, add_subplot(111,aspect='equal') मेरे लिए काम करता है।

python matplotlib

मैं एक वर्ग साजिश (imshow का उपयोग कर), यानी पहलू अनुपात 1: 1 बनाने की कोशिश कर रहा हूं, लेकिन मैं नहीं कर सकता। इनमें से कोई भी काम नहीं:

import matplotlib.pyplot as plt

ax = fig.add_subplot(111,aspect='equal')
ax = fig.add_subplot(111,aspect=1.0)
ax.set_aspect('equal')
plt.axes().set_aspect('equal')

ऐसा लगता है जैसे कॉल को अनदेखा किया जा रहा है (एक समस्या जो मुझे अक्सर matplotlib के साथ प्रतीत होती है)।




यह उत्तर यान के उत्तर पर आधारित है। यह रैखिक या लॉग-लॉग प्लॉट के लिए पहलू अनुपात निर्धारित करेगा। Axes लॉग-स्केल होने पर परीक्षण करने के लिए मैंने https://.com/a/16290035/2966723 से अतिरिक्त जानकारी का उपयोग किया है।

def forceAspect(ax,aspect=1):
    #aspect is width/height
    scale_str = ax.get_yaxis().get_scale()
    xmin,xmax = ax.get_xlim()
    ymin,ymax = ax.get_ylim()
    if scale_str=='linear':
        asp = abs((xmax-xmin)/(ymax-ymin))/aspect
    elif scale_str=='log':
        asp = abs((scipy.log(xmax)-scipy.log(xmin))/(scipy.log(ymax)-scipy.log(ymin)))/aspect
    ax.set_aspect(asp)

जाहिर है आप अपने इच्छित log किसी भी संस्करण का उपयोग कर सकते हैं, मैंने scipy उपयोग किया है, लेकिन numpy या math ठीक होना चाहिए।




Related