我在一个图上有一个散点图。我希望能够在上述散点图上选择多个数据点,并根据所选数据的索引在另一幅图上绘制一个(可能)多线时间序列图。
伪代码:
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库由于不支持我的平台而无法使用。
如何实现?
答案 0 :(得分:0)
注意:我选择不支持同时进行多个时间序列绘图,尽管这是对此的微不足道的扩展。
要使用所选数据点的索引来确定要在另一幅图中绘制的内容,您需要:
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://bokeh.pydata.org/en/latest/docs/user_guide/interaction/callbacks.html#customjs-for-selections