2010-02-17 7 views
34

का उपयोग करके ड्रॉ पॉइंट्स मैं दो सूचियों में से एक, एक्स और वाई में से एक का उपयोग करने के बजाय (x,y) जोड़े की सूची का उपयोग करके आलेख खींचना चाहता हूं। कुछ इस तरह:matplotlib.pyplot [[x1, y1], [x2, y2]]

a = [[1,2],[3,3],[4,4],[5,2]] 
plt.plot(a, 'ro') 

बजाय:

plt.plot([1,3,4,5], [2,3,4,2]) 

सुझाव?

उत्तर

1

एक सहायक कार्य लिखें।

यहां एक लंबा संस्करण है, लेकिन मुझे यकीन है कि इसे संपीड़ित करने के लिए एक चाल है।

>>> def helper(lst): 
    lst1, lst2 = [], [] 
    for el in lst: 
     lst1.append(el[0]) 
     lst2.append(el[1]) 
    return lst1, lst2 

>>> 
>>> helper([[1,2],[3,4],[5,6]]) 
([1, 3, 5], [2, 4, 6]) 
>>> 

इसके अलावा इस सहायक जोड़ें:

def myplot(func, lst, flag): 
    return func(helper(lst), flag) 

और यह इतनी तरह फोन:

myplot(plt.plot, [[1,2],[3,4],[5,6]], 'ro') 

वैकल्पिक रूप से आप एक पहले से ही instantiated ऑब्जेक्ट में एक समारोह जोड़ सकते हैं।

54

आप कुछ इस तरह कर सकते हैं:

a=[[1,2],[3,3],[4,4],[5,2]] 
plt.plot(*zip(*a)) 

दुर्भाग्य से, आप अब 'ro' पारित कर सकते हैं। आप कीवर्ड पैरामीटर के रूप में मार्कर और रेखा शैली मूल्यों से गुजरना होगा:

a=[[1,2],[3,3],[4,4],[5,2]] 
plt.plot(*zip(*a), marker='o', color='r', ls='') 

चाल मैं इस्तेमाल किया unpacking argument lists है।

+6

मैं आमतौर पर 'plt.plot (* np.transpose (ए)) '(जहां मैंने' आयात numpy को np' कहा है) का उपयोग किया है, जो आपके द्वारा सुझाए गए समकक्ष के बराबर है। –

9

आप numpy सरणी का उपयोग कर रहे हैं, तो आप अक्ष से निकाल सकते:

a = array([[1,2],[3,3],[4,4],[5,2]]) 
plot(a[:,0], a[:,1], 'ro') 

सूचियों या सूचियों के लिए आप कुछ सहायक की आवश्यकता होगी, जैसे:

a = [[1,2],[3,3],[4,4],[5,2]] 
plot(*sum(a, []), marker='o', color='r') 
8

सूची comprehensions

मैं अत्यधिक सूची समझ के उदार आवेदन का सुझाव देता हूं। न केवल वे तंग और शक्तिशाली हैं, वे आपके कोड को बहुत पठनीय बनाते हैं। इस तरह

कोशिश कुछ:

list_of_lists = [[1,2],[3,3],[4,4],[5,2]]  
x_list = [x for [x, y] in list_of_lists] 
y_list = [y for [x, y] in list_of_lists] 

plt.plot(x_list, y_list) 

तर्क unpacking बचा जाना चाहिए। यह बदसूरत है।

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