我想在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的新手,可能有些事情我可能做错了所以请忽略那些
请提出一些建议。
由于
答案 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)