使用Python在x轴上实时绘制数据随时间变化的图表。

4

我希望能够在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的新手,可能有些事情做得不对,请忽略这些。

请提供一些建议。

谢谢


我在谷歌上搜索了matplotlib动态,但是没有找到对我有用的东西,你能否提供链接? - yuvraj
抱歉,我误解了你的问题。 - joaquin
在您提供的示例中,新数据插入到左侧。但是您写道“我希望x轴动态更改,即当我获取新数据时,窗口长度应保持不变,但x轴应该移动。” 您能详细说明您拥有什么和您想要什么吗?请在文本中逻辑上分离您的2个问题。这有助于每个人阅读它。 - sebix
我目前正在绘制串行数据与样本点之间的图表。但我想要将串行数据绘制在实时时间(当前日期和时间)下。我每秒接收大约200个样本的数据。关于代码,它不是我正在使用的实际代码,在我的实际代码中,我使用a1.extend(串行数据),因此数据从右侧插入。 - yuvraj
1个回答

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接