Боке: обратный вызов CustomJS для перемещения мыши или щелчка
Я хочу обновить данные графика на основе текущего положения мыши.
То, к чему я стремлюсь,-это что-то вроде интерактивной степенной функции plot, но вместо того, чтобы брать экспоненту из ползунка, возьмите экспоненту как текущее значение x курсора мыши (в пространстве координат графика, а не отображаемых координат).
Если невозможно получить обратный вызов onMouseMove, onClick также будет в порядке. Однако я не хочу нажимать на определенный график (тогда я мог бы используйте TapTool), но постукивания в любом месте сюжета должно быть достаточно.
1 ответ:
Вы можете использовать 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)Вывод консоли 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 ...

Comments