2013-11-21 8 views
8

मैं wxPython में एक छोटा ऐप लिख रहा हूं जिसमें matplotlib आकृति (wxagg बैकएंड का उपयोग करके) पैनल है। मैं उपयोगकर्ता को एक्स, वाई डेटा निर्यात करने की क्षमता जोड़ना चाहता हूं जो वर्तमान में किसी टेक्स्ट फ़ाइल में आकृति में प्लॉट किया गया है। क्या ऐसा करने के लिए कोई गैर-आक्रामक तरीका है? मैंने काफी खोज की है और मुझे कुछ भी नहीं मिल रहा है, हालांकि मुझे लगता है कि यह मेरे चेहरे के सामने अविश्वसनीय रूप से सरल और सही है।matplotlib आकृति से XY डेटा पुनर्प्राप्त करें

मैं निश्चित रूप से डेटा प्राप्त कर सकता हूं और इसे कहीं भी स्टोर कर सकता हूं, और इसका उपयोग कर सकता हूं - लेकिन यह मेरे कोड के निचले स्तरों में काफी आक्रामक होगा। यह इतना आसान है, और सार्वभौमिक हो सकता है, अगर मैं के रूप में आसान के रूप में कुछ कर सकते हैं:

x = FigurePanel.axes.GetXData() 
y = FigurePanel.axes.GetYData() 

उम्मीद है कि है कि कुछ समझ में :)

धन्यवाद इतना बनाता है! कोई भी मदद बहुत ही सराहनीय होगी!

संपादित करें: स्पष्टीकरण के लिए, मैं क्या जानना चाहता हूं कि एक्स, वाई डेटा प्राप्त करना है। पाठ फ़ाइल में लेखन उसके बाद मामूली बात है;)

+0

मैं कसम खाता हूँ मैं शब्दों है कि मैं के बारे में सोच सकता है के हर संभव संयोजन googled, लेकिन यह धागा भर में नहीं आया था! लिंक के लिए धन्यवाद। – brettb

+0

मुझे केवल इतना पता चला कि 'matplotlib get_xdata' के लिए googling द्वारा, SO की मानक खोज के साथ नहीं। –

+1

बस एफवाईआई: सामान्य रूप से, मैटलप्लिब प्लॉटिंग फ़ंक्शंस 'कलाकार' उदाहरण (या 'प्लॉट' के मामले में कलाकारों का अनुक्रम) लौटाता है जिसमें डेटा, स्टाइलिंग जानकारी इत्यादि शामिल हैं। कई कलाकारों के पास' get_data' और 'set_data' है विधियों (उदाहरण के लिए आप 'x, y = line.get_data()') कर सकते हैं। कुछ के लिए, विधि को कुछ और कहा जा सकता है (उदाहरण के लिए 'स्कैटर' एक संग्रह देता है जहां समकक्ष विधि 'get_offsets' है) कुछ कलाकार (उदाहरण के लिए 'ContourSets') में मूल इनपुट डेटा के संदर्भ नहीं होते हैं, लेकिन यह काफी दुर्लभ है। असल में, आप साजिश कार्यों के उत्पादन को पकड़ना चाहते हैं। –

उत्तर

11

यह काम करता है:

In [1]: import matplotlib.pyplot as plt 

In [2]: plt.plot([1,2,3],[4,5,6]) 
Out[2]: [<matplotlib.lines.Line2D at 0x30b2b10>] 

In [3]: ax = plt.gca() # get axis handle 

In [4]: line = ax.lines[0] # get the first line, there might be more 

In [5]: line.get_xdata() 
Out[5]: array([1, 2, 3]) 

In [6]: line.get_ydata() 
Out[6]: array([4, 5, 6]) 

In [7]: line.get_xydata() 
Out[7]: 
array([[ 1., 4.], 
     [ 2., 5.], 
     [ 3., 6.]]) 

मैं अक्ष वस्तु में चारों ओर से खुदाई करके इन पाया। मुझे इन कार्यों के बारे में कुछ minimal information मिल सकता है, आप मूल रूप से या संसाधित डेटा प्राप्त करने के लिए उन्हें एक बुलियन ध्वज दे सकते हैं, यह सुनिश्चित नहीं कर सकते कि साधन क्या हैं।

संपादित: जो Kington एक से थोड़ा neater तरीका यह है पता चला:

In [1]: import matplotlib.pyplot as plt 

In [2]: lines = plt.plot([1,2,3],[4,5,6],[7,8],[9,10]) 

In [3]: lines[0].get_data() 
Out[3]: (array([1, 2, 3]), array([4, 5, 6])) 

In [4]: lines[1].get_data() 
Out[4]: (array([7, 8]), array([ 9, 10])) 
+0

धन्यवाद! मैं इसे आज़मा दूंगा। – brettb

+0

एक आकर्षण की तरह काम करता है। भविष्य के पाठकों के लिए, मैं उस लाइन में भी जोड़ूंगा .get_label() लाइन ऑब्जेक्ट से जुड़े लेबल को भी लौटाता है;) फिर से धन्यवाद! – brettb

+0

क्यों नहीं 'mpl_toolkits.mplot3d.art3d.Line3D ऑब्जेक्ट' 'get_zdata()' है? मैं जेड मान निकालने नहीं कर सकता। :-( –

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