在x轴上绘制数据时间并使用python实时调整

时间:2014-09-20 07:03:33

标签: python matplotlib plot

我想在x轴上绘制实时串行数据与时间的关系。 我希望x轴动态变化,即当我获得新数据时,窗口长度应该保持相同,但x轴应该移动。

到目前为止,我已经能够绘制串行数据样本采样点,我无法更改x轴,但y轴值不断变化。

我从这个论坛本身获得了给定代码的帮助

import matplotlib.pyplot as plt
import time
import random
from collections import deque
import numpy as np


def random_gen():
    while True:
        val = random.randint(1,10)
        yield val
        time.sleep(0.1)


a1 = deque([0]*100)
ax = plt.axes(xlim=(0, 20), ylim=(0, 10))
d = random_gen()

line, = plt.plot(a1)
plt.ion()
plt.ylim([0,10])
plt.show()

for i in range(0,20):
    a1.appendleft(next(d))
    datatoplot = a1.pop()
    line.set_ydata(a1)
    plt.draw()
    plt.pause(0.0001) 

我已经为我的情况更改了random_gen()部分,我正在绘制串行数据但是我给出了这个代码,因为否则我会在文件中提供串行数据,这只会使事情变得复杂。

我发现此代码可用于查找时间值

import datetime

dlist = deque([datetime.datetime.now()] * 100)

while 1:
    # collect the data .........

    dlist.appendleft((datetime.datetime.now()))

我不知道如何动态更改x轴。

我是python的新手,可能有些事情我可能做错了所以请忽略那些

请提出一些建议。

由于

1 个答案:

答案 0 :(得分:0)

也许我误解了您的问题,但是每次添加新数据时都无法使用plt.xlim()并更新它?使用您的示例,循环将更改为:

for i in range(0,20):
    a1.appendleft(next(d))
    datatoplot = a1.pop()
    line.set_ydata(a1)
    plt.xlim(0, 20 + i)
    plt.draw()
    plt.pause(0.0001)