我要做的是以下内容:给定一些(x,y)坐标,绘制图形。单击/悬停该图上的点时,查找其他一组坐标,(i,j)(这些坐标将被索引/(x,y)坐标的函数),并绘制这些坐标(i) ,j)在第一张图旁边的第二张图上。
我能够使用Bokeh完成我提到的所有事情,除了使用CustomJS时,我使用Tap事件,它不提供实际点的坐标,而是给出近似值到实际点,因为它只是看着鼠标坐标。我没有看到任何符合此目的的事件。我看到Hovertool实际上能够指出具体点。我可以使用那个Hoverdata吗?我无法弄清楚如何将两者合并,或者是否有其他方式。
感谢您的帮助!
答案 0 :(得分:0)
您可以使用HoverTool.callback
,这是一个示例:
import numpy as np
from bokeh.io import show
from bokeh.models import ColumnDataSource, HoverTool, CustomJS
from bokeh.plotting import figure
from bokeh.layouts import column
source1 = ColumnDataSource(data={"freq":np.random.uniform(2, 10, 10), "amp":np.random.uniform(-2, 2, 10)})
source2 = ColumnDataSource(data={"x":np.linspace(-5, 5, 200), "y":np.zeros(200)})
fig1 = figure(plot_height=200)
fig2 = figure(plot_height=200)
circle = fig1.circle("freq", "amp", source=source1, size=10)
line = fig2.line("x", "y", source=source2)
def callback(source1=source1, source2=source2):
indices = cb_data.index["1d"].indices
if len(indices) > 0:
i = indices[0]
f = source1.data.freq[i]
a = source1.data.amp[i]
for j in range(len(source2.data.x)):
source2.data.y[j] = a * Math.sin(f * source2.data.x[j])
source2.change.emit()
hover = HoverTool(callback=CustomJS.from_py_func(callback))
fig1.add_tools(hover)
show(column(fig1, fig2))