有人实现过监护仪上的心电图吗echarts
和这种一样的心电图有没有人做过,这台机器每秒钟发一个数组,数组中有两百多个数据。
我试着用echarts的动态折线图来做,要想一秒钟跑完两百多条数据,那速度看起来太快了,如果一秒钟跑不完,那websocket又会返回新的数组。
折线图又不能做的太长,我如果让可视化区域保留四五十条数据,看起来就已经很挤了。 总之就是看起来太死板,没有仪器上那么自然。
这是我做的,可视区域保留了40条左右的数据,但是一组数有两百多条数据呢,一秒钟跑完,速度太快,这个图看起来就像在跳舞。
如果保留的特别多,又比较拥挤
不知道心电图每秒钟返回的两百多条数据是都要在echarts上显示出来,还是取一个平均数塞到echarts里。如果是取一条平均数的话,这样一秒钟一条数据确实很慢,但是达不到监护仪上那种连续的效果。而且监护仪上的心电图是每条数据跑完,中间是有个间隙的。
有没有大神做过这种医院的项目,求解。
回答
这个其实是策略问题,不知道你真正观察过心电图机是怎么处理的没有?
它其实把脉动显示区域是分成了多个区域的,从左到右依次更新,然后周而复始
这样就不存在更新过快的问题,也就是说每秒更新1个区域即可,这样前面显示的至会显示几秒的,比如分成5份就至少展示5秒左右啦。
这个屏幕显示数据仅仅是一种情况模拟展示(也不可能完全展示清楚),不需要那么较真,医生看病依据是静态心电图。
估计你前面是想每秒就完整更新一次,当然觉得快了啊。
这个如果没有交互事件的话,canvas手写个也不难吧,就画一个曲线
需要定义一个数组来管理显示的数据,再定义一个数组来缓存 webSocket
发来的数据。
每隔一段时间从缓存数组尾部取出一部分数据插入到显示数组头部;并且从显示数组尾部去掉同样多的数据,然后把显示数据传给图表;webSocket
发来的数据插入到缓存数组头部。
最优时间间隔应该是 16.7
毫秒,这是 60
帧动画的帧间隔,但是为了计算方便,也为了防止帧率达不到 60
,时间间隔设为 20
毫秒,即50
帧。
这样一来每次需要取出/移除的数据条数为:
$$
x = socketDataLength / 50
$$
socketDataLength
为 webSocket
每秒返给你的数据条数。
当然,setTimeout
或者 setInterval
会有误差累积,如果要长期运行的话,需要每隔一段时间校准一下时间,最佳实践是用 requestAnimationFrame
结合系统时间来刷新,这个比较麻烦。
简单的法子也有,就是每秒在左侧画一个图表,然后匀速向右移动,移出画布之后销毁或者挪到最左边复用。
以上是 有人实现过监护仪上的心电图吗echarts 的全部内容, 来源链接: utcz.com/a/49291.html