0

我正在尝试绘制一些在 4 分钟内收集的心率数据。理想的图表将是随数据实时移动的心率动画(即 4 分钟的动画图表)。数据看起来像这样:

import pandas as pd
import random
import more_itertools as mit

data = pd.DataFrame({'time': mit.random_combination(range(708709, 987067), r=410), 
                   'HR': [random.randint(70,110) for x in range(410)]})

我从这篇非常有用的文章 ( https://towardsdatascience.com/dynamic-replay-of-time-series-data-819e27212b4b ) 中尝试的原始代码设法制作了一个无法跨越所需 4 的动态时间序列图分钟。如您所见,当设备收集 HR 数据时存在不一致的失误,因此原始解决方案并不理想。(下面的原始解决方案)。理想情况下,我想避免估算缺失的时间值。

谢谢你的时间!

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from collections import deque
%matplotlib qt5
plt.ion()

Heartrate = 'HR'
%matplotlib qt5

plt.ion()

visible = 40

dy1 = deque(np.zeros(visible), visible)
dx = deque(np.zeros(visible), visible)

#interval = np.linspace(0, data.shape[0], num=data.shape[0])
interval = data['time']
fig = plt.figure(figsize=(15,10))

ah1 = fig.add_subplot(111)
ah1.set_xlabel("Time [ms]", fontsize=14, labelpad=10)
ah1.set_ylabel("Heart Rate Last 5 Seconds", fontsize=14, labelpad=5)
l1, = ah1.plot(dx, dy1, color='rosybrown', label='HR')
ah1.legend(loc="upper right", fontsize=12, fancybox=True, framealpha=0.5)

start = 0

while start+visible <= data.shape[0]-1:

    # extend deques (both x and y axes)
    dy1.extend(data[Heartrate].iloc[start:start+visible])
    dx.extend(interval[start:start+visible])

    # update axes
    l1.set_ydata(dy1)  
    l1.set_xdata(dx)

    # get mean of deques
    mdy1 = np.mean(dy1)

    # set x- and y-limits based on their mean
    dist = 20
    ah1.set_ylim(-dist+min(data['HR']), max(data['HR'])+dist) # static y-axis
    #ah1.set_ylim(-35+mdy1, 35+mdy1) # dynamic y-axis
    ah1.set_xlim(interval[start], interval[start+visible])

    # control speed of moving time-series
    start += 1

    fig.canvas.draw()
    fig.canvas.flush_events()
4

0 回答 0