2016-01-20 77 views
3

我想根据当前鼠标位置更新我的绘图数据。散景:自定义鼠标移动或点击回调

我的目标是什么的是一样的东西的interactive power function plot,但不是从滑块采取的指数,以指数是鼠标光标的当前x值(在情节坐标空间,不显示坐标) 。

如果无法获得onMouseMove回调,onClick也可以。不过,我不想点击一个特定的图表(然后我可以使用TapTool),但是在剧情的任何地方点击都应该足够了。

回答

5

您可以使用HoverTool和CustomJS,如下面的代码示例所示。这个例子画出从光标位置到(1,1)点的一条线。打开JavaScript控制台时,您可以在移动鼠标时看到x和y的值。

from bokeh.plotting import figure,show, ColumnDataSource 
from bokeh.models import CustomJS, HoverTool 
import numpy as np 

s = ColumnDataSource(data = dict(x=[0,1],y=[0,1])) #points of the line 
callback = CustomJS(args=dict(s=s), code=""" 
     var geometry = cb_data['geometry']; 
     var x_data = geometry.x; // current mouse x position in plot coordinates 
     var y_data = geometry.y; // current mouse y position in plot coordinates 
     console.log("(x,y)=" + x_data+","+y_data); //monitors values in Javascript console 
     var x = s.get('data')['x']; 
     var y = s.get('data')['y']; 
     x[0] = x_data; 
     y[0] = y_data; 
     s.trigger('change'); 
    """) 
hover_tool = HoverTool(callback=callback) 
p = figure(x_range=(0,1), y_range=(0,1), tools= [hover_tool, 
         "crosshair,box_zoom,wheel_zoom,pan,reset"]) 
p.line(x='x',y='y',source=s) 
show(p) 

enter image description here

的JavaScript控制台输出:

... 
VM615:7 (x,y)=0.37494791666666666,0.37447916666666664 
VM615:7 (x,y)=0.37494791666666666,0.37114583333333334 
VM615:7 (x,y)=0.37161458333333336,0.37114583333333334 
VM615:7 (x,y)=0.38828125,0.37114583333333334 
VM615:7 (x,y)=0.43161458333333336,0.3878125 
VM615:7 (x,y)=0.7216145833333333,0.4878125 
... 
+0

这非常适用于鼠标的位置,但可以在CustomJS适应的点击?谢谢! –

+0

您可以使用TapTool来对点击字形上的事件做出反应。在我的答案尝试在这里看到一个例子:http://stackoverflow.com/questions/41640536/bokeh-how-to-make-hovertool-tooltips-stick-to-points-on-click –

相关问题