在交互式地图和图表上实现JavaScript回调(Bokeh)

在交互式地图和图表上实现JavaScript回调(Bokeh),javascript,python,maps,bokeh,timeserieschart,Javascript,Python,Maps,Bokeh,Timeserieschart,我正在尝试创建一个与Bokeh的交互式地图,通过使用lasso工具封闭一组特定的点,可以生成一个图表,其中包含特定变量的各种时间序列数据(例如,时间元素的浓度)。代码的操作如中所示 我的方法中存在的问题是,我只有一个数据源,该数据源根据所包含的元素进行更新,并且在图表中我只有一条关联的线,因此我无法更改线的属性(颜色、标签等),因为理论上它只有一条。从这个意义上说,“回调”目前所做的是获取套索所包围的点,并为每一个点选择数据x、y以生成图表,并将其保存在用于图表时间序列的ColumnDataSo

我正在尝试创建一个与Bokeh的交互式地图,通过使用lasso工具封闭一组特定的点,可以生成一个图表,其中包含特定变量的各种时间序列数据(例如,时间元素的浓度)。代码的操作如中所示

我的方法中存在的问题是,我只有一个数据源,该数据源根据所包含的元素进行更新,并且在图表中我只有一条关联的线,因此我无法更改线的属性(颜色、标签等),因为理论上它只有一条。从这个意义上说,“回调”目前所做的是获取套索所包围的点,并为每一个点选择数据x、y以生成图表,并将其保存在用于图表时间序列的ColumnDataSource中。我认为正确的方法应该是为套索所包围的每个点生成一条线,但我还没有找到方法

回调代码如下所示:

source.selected.js_on_change('indices', CustomJS(args=dict(source=source,data_source=data_source,s2=s2, source2=source2), code="""
        //source: contains the data of the points
        //data_source: contains the time series data from each point
        //s2: save the name of the points selected
        //source2: saves the time series data from each selected point

        //Lasso event
        var inds = cb_obj.indices;
        var d1 = source.data;
        var d2 = s2.data;

        d2['nombre'] = []
        
        for (var i = 0; i < inds.length; i++) {
            d2['nombre'].push(d1['nombre'][inds[i]])       
        }
        s2.change.emit();
    
    //Chart event
        var data = data_source.data;
        var s_data = source2.data;
        var letter = data['Pozo'];
        var select_vals = s2.data['nombre'];
        var x_data = data['Fecha'];
        var y_data = data['Cota NE (msnm)'];
        var x = s_data['x'];
        x.length = 0;
        var y = s_data['y'];
        y.length = 0;
        for (var i = 0; i < x_data.length; i++) {
                if (select_vals.indexOf(letter[i]) >= 0) {
                    x.push(x_data[i]);
                    y.push(y_data[i]);
                    }
        }
        source2.change.emit();
"""))
plot = figure()
plot.line('x', 'y', line_width = 2, source = source2)
source.selected.js\u on\u change('index',CustomJS(args=dict(source=source,data\u source=data\u source,s2=s2,source2=source2),code=”“”
//来源:包含点的数据
//数据源:包含每个点的时间序列数据
//s2:保存所选点的名称
//source2:保存每个选定点的时间序列数据
//套索事件
var inds=cb_对象指数;
var d1=源数据;
var d2=s2.0数据;
d2['nombre']=[]
对于(变量i=0;i=0){
x、 推送(x_数据[i]);
y、 推送(y_数据[i]);
}
}
source2.change.emit();
"""))
绘图=图()
plot.line('x','y',线宽=2,震源=source2)
提前谢谢