MatPlotLib动态时间轴

时间:2015-04-16 01:15:17

标签: python matplotlib

我一直在研究,并找不到我正在寻找的解决方案。

是否有使用matplotlib创建动态x轴的方法?我有一个绘制了数据流的图表,我希望x轴显示已用时间(当前是静态0-100,而图表的其余部分更新为我的数据流)。

理想情况下,每个刻度线相隔0.5秒,显示最新的10秒。该程序将全天候运行,因此我可以将其设置为实际时间而不是秒表时间。我在研究中只发现了静态日期时间轴。

如果有必要,我可以提供代码,但这个问题似乎没什么必要。

1 个答案:

答案 0 :(得分:2)

由于我不知道你在播放什么,我写了一个通用的例子,它可以帮助你解决问题。

from pylab import *
import matplotlib.animation as animation

class Monitor(object):
    """  This is supposed to be the class that will capture the data from
        whatever you are doing.
    """    
    def __init__(self,N):
        self._t    = linspace(0,100,N)
        self._data = self._t*0

    def captureNewDataPoint(self):
        """  The function that should be modified to capture the data
            according to your needs
        """ 
        return 2.0*rand()-1.0


    def updataData(self):
        while True:
            self._data[:]  = roll(self._data,-1)
            self._data[-1] = self.captureNewDataPoint()
            yield self._data

class StreamingDisplay(object):

    def __init__(self):
        self._fig = figure()
        self._ax  = self._fig.add_subplot(111)

    def set_labels(self,xlabel,ylabel):
        self._ax.set_xlabel(xlabel)
        self._ax.set_ylabel(ylabel)

    def set_lims(self,xlim,ylim):
        self._ax.set_xlim(xlim)
        self._ax.set_ylim(ylim)

    def plot(self,monitor):
        self._line, = (self._ax.plot(monitor._t,monitor._data))

    def update(self,data):
        self._line.set_ydata(data)
        return self._line

# Main
if __name__ == '__main__':
    m = Monitor(100)
    sd = StreamingDisplay()
    sd.plot(m)
    sd.set_lims((0,100),(-1,1))

    ani = animation.FuncAnimation(sd._fig, sd.update, m.updataData, interval=500) # interval is in ms
    plt.show()

希望有所帮助