0

我每秒接收大约 10 次流式传感器结果作为点对(时间、值)。我想连续绘制最后 30 秒的结果(~300 点)。我执行以下操作:使用 animation.FuncAnimation 机制。每当 FuncAnimation 启动时,我都会从队列中读取最新结果,丢弃最旧的结果并使用 set_data(time_array,value_array) 重新绘制绘图。它运作良好,但有一个很大的缺点:我必须每次都使用 set_xlim() 来使 x 轴调整到新的时间值。有什么优雅的方法吗?我想使用时间轴为 [0,30] 的相对坐标,但找不到优雅的方法。

4

2 回答 2

0

你可能应该使用

ax.autoscale()

将轴缩放ax到其新内容。

于 2018-06-20T18:06:33.277 回答
0

我会创建一个仅包含最后 300 个点的第二个数组。类似于以下内容:

import numpy as np

fullArray = (time, value)
tempArray = fullArray

while takingData:
    lastTake = (time, value)
    fullArray = np.vstack((fullArray, lastTake))
    try:
        tempArray = np.hstack((fullArray[ -299: ,1 ], lastTake[1]))
    except IndexError:
        tempArray = np.hstack((fullArray[:,1], lastTake[1]))

这样,您将所有数据保存在 中fullArray,但您也有一个 1D 数组,其中仅包含可以绘制的最后 300 个点,range(len(tempData)) 而不是根据时间绘制。

于 2018-06-20T18:29:37.367 回答