使用Holoviews数据着色器更新现有绘图和悬停工具

问题描述

我在处理from holoviews.operation.datashader import datashade数据阴影输出以及在前端级别更新它们时遇到了麻烦。在通常的bokeh示例中,当我们在更新请求中更新columndatasource.data= new_data时,新的更改会自动反映在前端。

例如slider.py,所以一旦调用update_data(),我们将更新source.data = dict(x=x,y=y),这反过来将更新我们的相同图。但是,如果我们有10百万个点的大型数据集,我们必须使用datashader (任何其他方法都建议?),所以一旦我们获得datashade(hv.Curve(df[x],df[y]))输出,我们将不再能够更新数据源内容

那么,我们如何更新的相同的情节时,从下拉菜单选择一个值?并正确显示悬停值?

import numpy as np
import holoviews as hv
import datashader as ds
from dask import dataframe as dd
from bokeh.layouts import layout as bk_lyout
from bokeh.plotting import figure
from holoviews.operation.datashader import datashade,dynspread
from bokeh.models import (CategoricalColorMapper,HoverTool,ColumnDataSource,Panel,FuncTickFormatter,SingleIntervalTicker,Linearaxis,Column)

from bokeh.models.widgets import (CheckBoxGroup,Slider,RangeSlider,Tabs,CheckBoxButtonGroup,TableColumn,DataTable,Select)

from bokeh.layouts import row
from bokeh.palettes import Category20_16

renderer = hv.renderer('bokeh').instance(mode='server')
cols = ['A-Val','B-Val','D-Val']

def modify_doc(doc,x,y,df):    plot1 = get_plot(doc,df)
   
       def update_plot(attr,old,new):
       print('attr {} old {} new {}'.format(attr,new))
       x = select_x.value
       y = select_y.value
       plot_type = select_plot_type.value
       print("update plot {}-{}".format(x,y))
   
       new_vmap = dynspread(datashade(curve(x,df,plot_type))).opts(width=1200,height=600,tools=["hover"])
       new_hvplot = renderer.get_plot(new_vmap,doc)
       new_plot = bk_lyout([[new_hvplot.state]],sizing_mode='scale_width')
       doc.add_root(new_plot)

       select_x = Select(title='x-axis',options=cols,value=x)    
       select_y = Select(title='y-axis',value=y)    
       select_plot_type = Select(title='Plots',options=PLOTS,value=PLOTS[0])
       
       select_x.on_change('value',update_plot)    
       select_y.on_change('value',update_plot)    
       select_plot_type.on_change('value',update_plot)    
     
       layout = row(Column(select_x,select_y,select_plot_type,plot1,plot2))
       tab = Panel(child=layout,title='Interactive Plotting')    
       return tabs

这里

  1. 一旦调用update_plot(),我被迫在doc.add_root(new_plot)添加新图,是否有任何方法可以更新称为update_plot()的现有图本身?

  2. 在悬停在绘图上时,当我使用datashed函数时,我的x轴和y轴值格式不正确吗?我的X轴是%Y-%m-%d %H:%M:%s格式的时间戳,Y轴是浮点值。

  3. X轴值格式不正确,突出显示

    enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)