我在一个图上有一个散点图。我希望能够在上述散点图上选择多个数据点,并根据所选数据的索引在另一幅图上绘制一个(可能)多线时间序列图。
伪代码:
data = { x: [1,2,3], y: [1,2,3], time_series: [[1,2,3],[4,5,6],[7,8,9]] }
figure1 = scatter_plot(x, y, select_enabled=True)
figure2 = multi_line_timeseries(figure1.indexes_of_selected_points)
show([figure1, figure2])
因此,如果在图1上选择了[1,1]
数据点(索引0),则在图2上绘制了[1,2,3]
时间序列(索引0)。如果选择了多个点,则将绘制多个时间序列。
限制是由于HoloViews库不支持我的平台,因此无法使用。
如何实现?
注意:我选择不支持同时进行多个时间序列绘图,尽管这是对此的微不足道的扩展。
要使用所选数据点的索引来确定要在另一幅图中绘制的内容,您需要:
x,y,timeseries
)放在一个或多个ColumnDataSource
上;ColumnDataSource
,它将作为绘制时间序列的第二个图形的源;TapTool
('tap'
);CustomJS
添加ColumnDataSource
回调;ColumnDataSource
参数化该回调;ColumnDataSource
进行必要的更改;cds_of_2nd_figure.change.emit()
。>>代码说明:
cds = ColumnDataSource(data=dict(x=x,y=y,timeseries=timeseries)) cds2 = ColumnDataSource(x_to_plot=[],u_to_plot=[]) def selection_callback(d=cds,d2=cds2): last_selected_ix = cb_obj.selected.indices[0] timeserie = d.data['timeseries'][last_selected_ix] x_to_plot = timeserie['x'] y_to_plot = timeserie['y'] d2.data['x_to_plot'] = x_to_plot d2.data['y_to_plot'] = y_to_plot d2.changes.emit() # turn above function to js selection_callback = CustomJS.from_py_func( selection_callback ) cds.callback = selection_callback
[当某个图形从
cds
中选择数据时,timeseries[ix]
时标将绘制在绘制cds2
的图形上,其中ix
是从cds
中最后选择的数据点的索引。] >具有所有相关信息的相关资源:
https://docs.bokeh.org/en/latest/docs/user_guide/interaction/callbacks.html#customjs-for-tools