Python 实时多线图更新,性能良好

Python 实时多线图更新,性能良好,python,bokeh,graphing,Python,Bokeh,Graphing,我目前正在使用Bokeh来展示一个多线绘图,它有几个静态线和一条线,这是实时更新的。这在只有几行的情况下运行良好,但是,根据行的分辨率(通常每行2000-4000点),当绘图中有50多行时,刷新率会显著下降。当时浏览器的CPU使用率相当高 这是如何初始化绘图和触发实时更新的: figure\u opts=dict(绘图宽度=750, 绘图高度=750, x_范围=(0,数据集大小), y_范围=(0,np.iinfo(dtype).max), 工具=‘平移、滚轮_缩放’) 行\u opts=di

我目前正在使用Bokeh来展示一个
多线
绘图,它有几个静态线和一条线,这是实时更新的。这在只有几行的情况下运行良好,但是,根据行的分辨率(通常每行2000-4000点),当绘图中有50多行时,刷新率会显著下降。当时浏览器的CPU使用率相当高

这是如何初始化绘图和触发实时更新的:

figure\u opts=dict(绘图宽度=750,
绘图高度=750,
x_范围=(0,数据集大小),
y_范围=(0,np.iinfo(dtype).max),
工具=‘平移、滚轮_缩放’)
行\u opts=dict(
线条宽度=5,线条颜色=颜色,线条alpha=0.6,
悬停线颜色='color',悬停线α=1.0,
源=剖面线
)
剖面图=图(**图)
profile\u plot.toolbar.logo=无
多线图=剖面图。多线图(xs='x',ys='y',**线图选项)
纵断面图\u plot.xaxis.axis\u label=“x”
纵断面图\u plot.yaxis.axis\u label=“y”
ds=多线图数据源
def update_live_plot():
random_arr=np.random.random_整数(65535*(i%100)/(100+100/4),65535*(i%100+1)/100,(2048))
外形=随机排列A型(np.uint16)
如果配置文件不是无:
剖面线[“x”][i]=x
剖面线[“y”][i]=剖面线
轮廓线[“颜色”][i]=类别20\u 20[0]
ds.data=剖面线
文档添加定期回调(更新实时绘图,100)
有什么方法可以让它表现得更好吗? 例如,是否可以只更新需要更新的一行,而不是
ds.data=profile\u行

编辑:需要更新的一行必须全部更新。也就是说,我不是在一端流式传输数据,而是有一组全新的2000-4000个值,并希望显示这些值,而不是旧的实时线路。
目前,在线是
profile\u lines
字典中数组中
i
处的元素。

幸运的是,使用CDS
patch
方法可以在保持相同长度的同时用所有新元素更新单行。(在这里,流式传输没有帮助,因为对于
多行
而言,流式传输到CD的末尾意味着添加一个完整的新行,而流式传输到每个子行末尾的另一种情况根本没有好的解决方案。)

存储库中有一个显示如何使用
补丁
更新
多行中的一行
。该示例仅更新直线中的一个点,但可以使用切片一次更新整条直线:

source.patch({ 'ys' : [([i, slice(None)], new_y)]})

这将更新
source.data['ys']
中的第i行,只要
new\u y
与旧行长度相同

需要更多的细节。您是否正在尝试更新这些行而不更改其长度?或者您正在尝试将新数据流传输到各行的末尾?或(我问,因为这会产生不同)我希望我现在澄清一下,我正在以恒定的长度更新整个行。我不是在一端传输数据。