我正在尝试绘制一些在 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()