2016-07-27 86 views
1

我無法確定如何繪製使用Matplotlib的連續函數。我得到了如何繪製散點圖,但我想要一個連續的陰謀。實時更新連續功能

這裏是我的代碼:

import matplotlib.pyplot as plt 
from matplotlib.pyplot import autoscale 
import matplotlib.animation as animation 

import numpy 


class MyPlot(): 
    def __init__(self): 
     self.index = 0 
     self.setup() 

    def setup(self): 
     plt.ion() 
     self.fig, self.ax = plt.subplots() 
     self.line = self.ax.plot([],[]) 
     autoscale() 
     plt.show() 
    def anim(self, i): 
     self.line.set_ydata(i) # update the data 
     return self.line, 
    def add(self, val): 
     print self.index, val 
     self.ax.plot(self.index, val) 
     animation.FuncAnimation(self.fig, self.anim, repeat=False) 
     plt.pause(0.05) 
     #if(self.index >= ntests): 
     self.index+=1 

if __name__== "__main__": 
    import time 
    from random import random 
    p = MyPlot() 

    for i in range(100): 
     p.add(random()) 
     time.sleep(0.5) 

這工作,但不畫任何東西。儘管如此,情節也在改變。

+0

的[動態更新在matplotlib情節]可能的複製(http://stackoverflow.com/questions/10944621/dynamically-updating-plot-in-matplotlib) –

+1

找到FYI matplotlib是可更新的,但用於表示質量的圖表,並不意味着實時更新顯示。你可能想看看http://vispy.org/ –

+0

@JasonS。通常看看評論有點吸吮,因爲他們試圖掩蓋評論者無法看到問題的解決方案。這並非如此。感謝您的鏈接:) –

回答

2

您一次只繪製一個點(不存在),因此沒有任何顯示。如果您將self.ax.plot替換爲self.ax.scatter,則繪圖正確。

如果您確實需要線條,您可以跟蹤最後一個索引和值,並繪製一條連接最後一個索引和值與每次當前索引和值的線條。

添加這兩行加()

self.ax.plot([self.index-1, self.index], [self.lastval, val]) 
    self.lastval = val 

以及()線在設置初始化self.lastvalnumpy.nan

+0

Thansk爲答案!是的,正如我在問題中所說的,我知道如何繪製散點圖。我已經考慮過單點的事情了,因爲情節無論如何都會調整大小。正如我在問題中所說的,我需要一個連續的陰謀。我怎樣才能真正連接這兩點?謝謝 –

+0

編輯答案 – honi

+0

太棒了!非常感謝! –

2

實際上,你可以追加值在matplotlib線圖:

self.line.set_xdata(numpy.append(self.line.get_xdata(), self.index)) 
self.line.set_ydata(numpy.append(self.line.get_ydata(), val)) 

這樣,您不必自己做任何簿記。

的更多細節可以在https://stackoverflow.com/a/10944967/2988730