दिलचस्प पोस्ट
घटक के लिए भुगतान किए बिना मैं .NET में RTF (रिच टेक्स्ट) को HTML कैसे रूपांतरित कर सकता हूं? बहुत खराब बढ़ावा: lexical_cast प्रदर्शन एसक्यूएल, संख्या की सहायक तालिका PHP में वैश्विक चर और फ़ंक्शन मापदंडों के बीच लाभ / हानि? ऑनक्लिक फ़ंक्शन में 'इस' संदर्भ को रखते हुए मैं एक एन्कर्र टैग से एक onclick () ईवेंट को कैसे प्रोग्राममैट कर सकता हूं? फायरबेज: अतिरिक्त उपयोगकर्ता गुणों की स्थापना jQuery: मौजूदा <ul> में <li> कैसे जोड़ें? Typedef फ़ंक्शन सूचक? टेक्स्ट संपादित करें फ़ील्ड का मूल्य प्राप्त करें सी ++ वेक्टर, ऑब्जेक्ट्स, फ्री मेमोरी डिलीट करें सीएसएस के साथ क्लिक करें पर div दिखाएँ / छुपाएं बिटमैप को बाइटअरे एंड्रॉइड में परिवर्तित करना मैं कोणीय फिल्टर के साथ डेटा कैसे जोड़ सकता हूँ? क्या मैं फ़ील्ड 'datetime' या 'टाइमस्टैम्प' का उपयोग करूँ? ViewData और ViewBag के बीच अंतर क्या है?

कैसे matplotlib में एक साजिश को अद्यतन करने के लिए?

मुझे इस आंकड़े को रेखांकित करने में समस्याएं आ रही हैं I मैं उपयोगकर्ता को समय के पैमाने (एक्स-अक्ष) में इकाइयों को निर्दिष्ट करने की अनुमति देता हूं और फिर मैं इस फ़ंक्शन plots() पुनः गणना और कॉल करता हूं plots() । मैं बस को अद्यतन करने के लिए साजिश चाहता हूँ, आंकड़ा के लिए एक और साजिश संलग्न नहीं।

 def plots(): global vlgaBuffSorted cntr() result = collections.defaultdict(list) for d in vlgaBuffSorted: result[d['event']].append(d) result_list = result.values() f = Figure() graph1 = f.add_subplot(211) graph2 = f.add_subplot(212,sharex=graph1) for item in result_list: tL = [] vgsL = [] vdsL = [] isubL = [] for dict in item: tL.append(dict['time']) vgsL.append(dict['vgs']) vdsL.append(dict['vds']) isubL.append(dict['isub']) graph1.plot(tL,vdsL,'bo',label='a') graph1.plot(tL,vgsL,'rp',label='b') graph2.plot(tL,isubL,'b-',label='c') plotCanvas = FigureCanvasTkAgg(f, pltFrame) toolbar = NavigationToolbar2TkAgg(plotCanvas, pltFrame) toolbar.pack(side=BOTTOM) plotCanvas.get_tk_widget().pack(side=TOP) 

वेब के समाधान से एकत्रित समाधान "कैसे matplotlib में एक साजिश को अद्यतन करने के लिए?"

आपके पास दो विकल्प हैं:

  1. ठीक से जो आप वर्तमान में कर रहे हैं, लेकिन डेटा को प्रतिपूर्ति करने से पहले graph1.clear graph1.clear() और graph2.clear() को कॉल करें। यह सबसे धीमी है, लेकिन सबसे आसान और सबसे मजबूत विकल्प है

  2. प्रतिलिपि बनाने के बजाय, आप केवल भूखंड वस्तुओं के डेटा को अपडेट कर सकते हैं। आपको अपने कोड में कुछ बदलाव करने की आवश्यकता होगी, लेकिन हर बार चीजों को प्रतिलिपि बनाने से बहुत ज्यादा तेज़ होना चाहिए हालांकि, जो डेटा आप साजिश रच रहे हैं, वह आकार बदल नहीं सकता, और यदि आपके डेटा की सीमा बदल रही है, तो आपको मैन्युअल रूप से एक्स और वाई अक्ष की सीमाओं को रीसेट करने की आवश्यकता होगी।

दूसरे विकल्प का एक उदाहरण देने के लिए:

 import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 6*np.pi, 100) y = np.sin(x) # You probably won't need this if you're embedding things in a tkinter plot... plt.ion() fig = plt.figure() ax = fig.add_subplot(111) line1, = ax.plot(x, y, 'r-') # Returns a tuple of line objects, thus the comma for phase in np.linspace(0, 10*np.pi, 500): line1.set_ydata(np.sin(x + phase)) fig.canvas.draw() 

यह मेरे लिए काम किया बार-बार हर बार ग्राफ को अद्यतन करने के लिए एक समारोह को दोहराता है

 import matplotlib.pyplot as plt import matplotlib.animation as anim def plot_cont(fun, xmax): y = [] fig = plt.figure() ax = fig.add_subplot(1,1,1) def update(i): yi = fun() y.append(yi) x = range(len(y)) ax.clear() ax.plot(x, y) print i, ': ', yi a = anim.FuncAnimation(fig, update, frames=xmax, repeat=False) plt.show() 

"मज़ा" एक फ़ंक्शन है जो एक पूर्णांक देता है FuncAnimation बार-बार "अपडेट" को कॉल करेगा, ऐसा "xmax" बार करना होगा

अगर किसी के पास इस आलेख में कोई बात आती है जो मैं देख रहा था तो मैं देख रहा था

Matplotlib के साथ स्केलर 2 डी डेटा को कैसे विज़ुअलाइज़ करना है?

तथा

http://mri.brechmos.org/2009/07/automatically-update-a-figure-in-a-loop (web.archive.org पर)

फिर उन्हें मक्खी पर आकृति बनाने और प्रयोग करने के बजाय फ़्रेम के एक इनपुट स्टैक के साथ imshow का उपयोग करने के लिए संशोधित किया गया।


आकृति के चित्रों (एनबीन, एनबींस, एनबींस) की एक 3D सरणी के साथ शुरू, frames कहा जाता है

 def animate_frames(frames): nBins = frames.shape[0] frame = frames[0] tempCS1 = plt.imshow(frame, cmap=plt.cm.gray) for k in range(nBins): frame = frames[k] tempCS1 = plt.imshow(frame, cmap=plt.cm.gray) del tempCS1 fig.canvas.draw() #time.sleep(1e-2) #unnecessary, but useful fig.clf() fig = plt.figure() ax = fig.add_subplot(111) win = fig.canvas.manager.window fig.canvas.manager.window.after(100, animate_frames, frames) 

मुझे इस संपूर्ण प्रक्रिया के बारे में जाने के लिए बहुत आसान तरीका भी मिला, यद्यपि कम मजबूत है:

 fig = plt.figure() for k in range(nBins): plt.clf() plt.imshow(frames[k],cmap=plt.cm.gray) fig.canvas.draw() time.sleep(1e-6) #unnecessary, but useful 

ध्यान दें कि इनमें से दोनों केवल ipython --pylab=tk , aka backend = TkAgg साथ काम करने लगते हैं

सब कुछ के साथ मदद के लिए धन्यवाद

मैंने अजगर-खींचा नामक एक पैकेज को रिलीज़ किया है जो आंकड़ा अद्यतन करने के लिए कार्यक्षमता प्रदान करता है, आमतौर पर drawnow के drawnow समान लूप के भीतर बुलाया जाता है।

एक उदाहरण उपयोग:

 from pylab import figure, plot, ion, linspace, arange, sin, pi def draw_fig(): # can be arbitrarily complex; just to draw a figure #figure() # don't call! plot(t, x) #show() # don't call! N = 1e3 figure() # call here instead! ion() # enable interactivity t = linspace(0, 2*pi, num=N) for i in arange(100): x = sin(2 * pi * i**2 * t / 100.0) drawnow(draw_fig) 

यह पैकेज किसी भी matplotlib आकृति के साथ काम करता है और प्रत्येक आंकड़ा अद्यतन या डिबगर में ड्रॉप होने के बाद इंतजार करने के लिए विकल्प प्रदान करता है।

उपरोक्त सभी सच हो सकते हैं, हालांकि मेरे लिए "ऑनलाइन अद्यतन" आंकड़े केवल कुछ बैकएंड्स के साथ काम करते हैं, विशेष रूप से wx आप बस इसे बदलने की कोशिश कर सकते हैं, उदाहरण के लिए ipython / pylab को ipython --pylab=wx द्वारा शुरू करें! सौभाग्य!