5

मेरा प्रश्न काफी सरल है: matplotlib में, मैं कैसे आसानी से निर्देशांक एक्सिस प्रणाली में परिवर्तित कर सकते हैं करने के लिए/डेटा प्रणाली सेअजगर/matplotlib: एक्सिस <=> परिवर्तित डाटा निर्देशांक प्रणाली

(आदर्श रूप में मैं एक साधारण समारोह output_coords = magic_func(input_coords) तलाश कर रहा हूँ)

असल में मेरी सटीक समस्या है: मैं डेटा सिस्टम में अपने केंद्र के साथ matplotlib.patches.Ellipse प्लॉट करना चाहता हूं लेकिन डेटा सिस्टम में उसका आकार (चौड़ाई लंबाई)। लेकिन transforms.blended_transform_factory विधि इस मामले में काम नहीं करती है।

धन्यवाद!

+1

उपयोग कर सकते हैं आप शायद [इस पर एक नज़र होनी चाहिए ] (http://matplotlib.org/users/transforms_tutorial.html) – Arthur

उत्तर

3

कोई तत्काल समाधान नहीं मिला, अपने आप से लिखने की जरूरत है:

def axis_data_coords_sys_transform(axis_obj_in,xin,yin,inverse=False): 
    """ inverse = False : Axis => Data 
       = True : Data => Axis 
    """ 
    xlim = axis_obj_in.get_xlim() 
    ylim = axis_obj_in.get_ylim() 

    xdelta = xlim[1] - xlim[0] 
    ydelta = ylim[1] - ylim[0] 
    if not inverse: 
     xout = xlim[0] + xin * xdelta 
     yout = ylim[0] + yin * ydelta 
    else: 
     xdelta2 = xin - xlim[0] 
     ydelta2 = yin - ylim[0] 
     xout = xdelta2/xdelta 
     yout = ydelta2/ydelta 
    return xout,yout 
+0

यह अच्छा है, धन्यवाद। 'Axis_obj_in.get_ [x या y] स्केल() 'का उपयोग करके लॉग स्केल किए गए अक्षों के लिए भी इसे आसानी से संशोधित किया जा सकता है। – askewchan

5

Axes उदाहरण ax से परिवर्तनों के लिए, आप

axis_to_data = ax.transAxes + ax.transData.inverted() 
points_data = axis_to_data.transform(points_axis) 
data_to_axis = axis_to_data.inverted() 
numpy.testing.assert_allclose(points_axis, data_to_axis.transform(points_data)) 
+0

हाय वहाँ, यह आश्चर्यजनक रूप से मेरे मामले हल हो गया। क्या कोई दस्तावेज़ पृष्ठ है जहां ट्रांस *() विधियों और वर्गों को समझाया गया है? – grafa

संबंधित मुद्दे