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