2012-06-05 13 views
6

का उपयोग करके 2 डी निर्देशांक की सरल एनीमेशन मैं matplotlib के लिए नया हूँ। मेरे पास एक्स-वाई निर्देशांक की एक सूची है जो मैं अजगर में अद्यतन करता हूं और matplotlib के pyplot का उपयोग करके एनिमेट करना चाहता हूं। मैं अग्रिम में एक्स-रेंज और वाई-रेंज निर्दिष्ट करना चाहता हूं। आप देख सकते हैं, मैं अपने यात्रा पाश के अंत में plt.plot() और plt.show()का उपयोग केवल अंतिम निर्देशांक साजिशmatplotlib और pyplot

import matplotlib.pyplot as plt 
x=[1,2,3,4] 
y=[5,6,7,8] 
for t in range(100): 
    #lists x and y get updated here 
    #... 
plt.plot(x, y, marker='o', linestyle='None') 
plt.show() 

: नीचे मेरे वर्तमान कोड है। लेकिन मैं इस चरण के अंदर एक निर्दिष्ट विराम समय के साथ प्रत्येक पुनरावृत्ति पर लूप और साजिश रखना चाहता हूं ताकि मेरे पास लूप चलाने के रूप में एक एनीमेशन हो।

बस उस कथन को लूप या ट्वीक्स के अंदर ले जाना काम नहीं कर रहा है। हालांकि मैं इसे बहुत सरल रखना चाहता हूं, और matplotlib.animation का उपयोग नहीं करना चाहता हूं। क्या कई और मॉड्यूल और पुस्तकालयों का उपयोग किए बिना कुछ सरल विधि है (केवल plt.pause() और शायद कुछ और चीजें) जो मुझे वही करने देगी जो मुझे चाहिए?

मैंने कई जगहों पर ऑनलाइन देखा, और मुझे सबसे अधिक तरीकों से सामना करने वाली समस्या यह है कि मैं इसके लिए विंडोज़ पर पायथन (एक्स, वाई) (वह पायथन संस्करण 2.7) का उपयोग कर रहा हूं, और बहुत जटिल मॉड्यूल और पुस्तकालयों का उपयोग करके एनिमेशन यहाँ दुर्घटनाग्रस्त हो रहे हैं।

हालांकि, मैं matplotlib साइट पर this example जैसी साधारण सामग्री चलाने में सक्षम हूं, जो कि मैं चाहता हूं कि करीब है, लेकिन काफी नहीं। तो शायद सबसे अच्छी बात इस उदाहरण का एक संशोधन होगा जो 2 डी डेटा के मामले के लिए काम करता है (वह उदाहरण 1 डी पंक्ति के लिए है)। लेकिन किसी भी अन्य सुझाव का स्वागत है।

उत्तर

8

यह animation demo से अनुकूलित है:

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 

x = [1, 2, 3, 4] 
y = [5, 6, 7, 8] 

for t in range(10): 
    if t == 0: 
     points, = ax.plot(x, y, marker='o', linestyle='None') 
     ax.set_xlim(0, 10) 
     ax.set_ylim(0, 10) 
    else: 
     new_x = np.random.randint(10, size=5) 
     new_y = np.random.randint(10, size=5) 
     points.set_data(new_x, new_y) 
    plt.pause(0.5) 

हालांकि यह आसान है docstring कहना है कि यह धीमी है।

+0

+1। यह काम। मैं इसे अपने अंतिम कार्यक्रम में अनुकूलित करने की कोशिश करूंगा और देख सकता हूं कि यह कैसे जाता है। –

+0

यह मेरे कार्यक्रम के साथ बहुत अच्छा काम किया। स्वीकार किए जाते हैं। और धन्यवाद! –

+0

'ax.clear() 'का उपयोग करना सुविधाजनक हो सकता है; तो आप बस एक ताजा आकृति प्लॉट कर सकते हैं और आपको पहले और बाद के रनों के बीच अंतर करने की आवश्यकता नहीं है। साथ ही, 'plt.pause()' ने मेरे लिए एक त्रुटि उत्पन्न की, मैंने इसके बजाय 'fig.canvas.start_event_loop()' का उपयोग किया। – Scipio