Animation 如何防止“动画”波克情节结巴

Animation 如何防止“动画”波克情节结巴,animation,plot,bokeh,Animation,Plot,Bokeh,我正在尝试创建一种仪表板,用于监控ECG数据和相关功能。当通过不断更新两列数据源来设置ECG的动画时,绘图很快就会开始结巴并变得缓慢。目前,我在笔记本上运行这个,但在bokeh服务器上也是如此 心电图本身显示的是最近的一秒,一行中大约有400个数据点。就其自身而言,这运行起来几乎是平稳的,但从仪表板的角度来看,这并没有真正的帮助。另一幅图显示了心率变异性,可能有十几圈,但来自最后一分钟的数据,因此有两个来源 数据源中收集的数据越多,更新速度越快,绘图速度越慢。ColumnDataSource.s

我正在尝试创建一种仪表板,用于监控ECG数据和相关功能。当通过不断更新两列数据源来设置ECG的动画时,绘图很快就会开始结巴并变得缓慢。目前,我在笔记本上运行这个,但在bokeh服务器上也是如此

心电图本身显示的是最近的一秒,一行中大约有400个数据点。就其自身而言,这运行起来几乎是平稳的,但从仪表板的角度来看,这并没有真正的帮助。另一幅图显示了心率变异性,可能有十几圈,但来自最后一分钟的数据,因此有两个来源

数据源中收集的数据越多,更新速度越快,绘图速度越慢。ColumnDataSource.stream的rollover参数会减少所收集内容的总长度,但最终不会防止口吃

我的代码中可能有一些新手的错误,因为我觉得bokeh应该能够很好地可视化如此大量的数据。下面是我做的绘图工作:

dashboard_source=ColumnDataSourcerecord[:1]使用第一行初始化 ecg_source=ColumnDataSourcerecord[:1]使用第一行初始化 一些选择 时间窗口=12秒以保持在视野内 ecg_长度=在ecg图中保持可见的1秒 更新速率=1000/采样速率每次绘图更新之间的毫秒数 更新函数,其中源数据从记录数据帧馈送 当前记录位置=1 def更新仪表板来源: 全局当前记录位置 新建行=记录.iloc[当前记录位置] dashboard\u source.streamnew\u行,滚动=采样率*时间窗口 ecg\u source.streamnew\u行,滚动=采样率*ecg\u长度 当前记录位置+=1 def ecg_仪表板文档: 仪表板元素:ECG绘图/s-------------------- ecg\u绘图=图宽=800,高度=400,标题='ecg',x\u轴\u标签='以毫秒为单位的时间',y\u范围=-1,1.5 绘制心电通道图 对于录制频道,Zipercard频道中的颜色,['绿色','蓝色']: ecg\u plot.linesource=ecg\u source,x='time\u ms',y=record\u channel,alpha=.3,legend=record\u channel+'',color=color 仪表板元素:心率变异性-------------------- hrv\u图=图形宽度=400,高度=400,标题=心率变异性,x轴\u标签=r'r,y轴\u标签=rr' hrv_plot.circlesource=dashboard_source,x='r_diff_1',y='r_diff_2',size=10,alpha=0.23 收集仪表板元素中的所有内容并将其添加到文档中 ecg\u行=行ecg\u图 特征_行=行HRV_图 仪表板=列ECG\u行、特征\u行 doc.add\u rootdashboard doc.add\u periodic\u callbackupdate\u dashboard\u来源、更新率 显示仪表板
我没有发现bokeh的用户指南对更新绘图非常有用。可能有一些最佳实践吗?

在评论中结束对话:每次向绘图添加一个点时,浏览器中的整个画布区域都会被重新绘制。这就是浏览器的工作原理。采样率为250会导致每秒250次绘图更新,即每4ms更新一次。这将使浏览器运行越来越慢,因为每4ms重新绘制渲染的点数将增加


我建议将更新周期从4ms增加到100ms左右,可能数据包更大

您的采样率是多少?是否有必要每秒更新两次以上ecg图或其他数据?目前采样率大多为360,但也可能在250或500左右。目标是提供真实速度的ECG,因此我需要相应的更新率。比如说,每第三个或第二个数据点删除一次可能不会丢失很多可见信息,但我更愿意包含所有数据。给定采样率为250,传递给add\u periodic\u回调的更新率值为4ms!!!因此,您正在尝试每秒更新250次多个绘图!我不相信这不是Bokeh或任何浏览器在这种情况下就所需性能而言所能做到的。啊,那么Bokeh可能不是我想要的,因为它以浏览器为中心的设计?通过省略数据或在更大的数据包中添加数据来修补更新率已经有所帮助,但使用浏览器查看并不是我真正的要求。另一个绘图库是否更合适?与DDOS攻击相比,我认为这是一个浏览器瓶颈,而不是Bokeh瓶颈,所以我不确定是否有其他选择。我只想把回调时间限制在50-100毫秒。你仍然可以每秒获得10-20分。