2016-09-10 75 views
2

ダブルクリックでインタラクションを追加したい場合は、OpenURLを使用してURLをロードする新しいタブを開きます。 。Bokeh:円でダブルクリックしたときのJSコールバック

これは私の現在のコードです:ちょうどクリックされたサークルに関する情報を示しJSコードを持つ文字列を返します

p = bokeh.plotting.figure(tools=TOOLS) 
cr = p.circle(y_true[:, 1], y_pred[:, 1], size=5, source=source) 

taptool = p.select(type=bokeh.models.TapTool) 
taptool.callback = bokeh.models.CustomJS(args={'circle': cr.data_source}, 
     code=self.show_data_callback()) 

show_data_callback

+2

現在の「TapTool」は、1回だけタップをサポートしています。ダブルクリックするように設定することも難しくないかもしれません。この機能を追加するPRに興味があれば、私たちはいつも質問に答えることができ、人々がBokeh開発を始めるのを手伝ってくれることを嬉しく思います。代わりに[Bokehは拡張可能です]、これを行うカスタムツール拡張を書くこともできます。 – bigreddot

答えて

2

hereでチュートリアル後、私は、クリック、ダブルクリックアクションの異なるアクションを持つ拡張を作成したボケチャットからいくつかの助けを借りて:例

from bokeh.core.properties import Instance 
from bokeh.io import output_file, show 
from bokeh.models import ColumnDataSource, TapTool, CustomJS, OpenURL 
from bokeh.plotting import figure 

output_file('tool.html') 

JS_CODE = """ 
p = require "core/properties" 
TapTool = require "models/tools/gestures/tap_tool" 

class NewTapToolView extends TapTool.View 

    _get_canvas_position: (e) -> 
    canvas = @plot_view.canvas 
    vx = canvas.sx_to_vx(e.bokeh.sx) 
    vy = canvas.sy_to_vy(e.bokeh.sy) 
    return [vx, vy] 

    _tap: (e) -> 
    console.log('click') 
    [vx, vy] = @_get_canvas_position(e) 
    append = e.srcEvent.shiftKey ? false 
    @_select(vx, vy, true, append) 

    _doubletap: (e) -> 
    console.log('double click') 
    [vx, vy] = @_get_canvas_position(e) 
    append = false 
    @_select(vx, vy, true, append) 

class NewTapTool extends TapTool.Model 
    default_view: NewTapToolView 
    type: "NewTapTool" 

    tool_name: "New Tap Tool" 

    @define { source: [ p.Instance ] } 

module.exports = 
    Model: NewTapTool 
    View: NewTapToolView 
""" 


class NewTapTool(TapTool): 
    __implementation__ = JS_CODE 
    source = Instance(ColumnDataSource) 


x = y = [i for i in range(10)] 
source = ColumnDataSource(data=dict(x=x, y=y)) 

plot = figure(x_range=(0, 10), y_range=(0, 10), tools=[NewTapTool(source=source)]) 
plot.title.text = "Double click on a dot to test" 
plot.circle('x', 'y', source=source, size=10) 

newtaptool = plot.select(type=TapTool) 
newtaptool.callback = OpenURL(url="https://en.wikipedia.org/") 

show(plot) 

二重丸をクリックするだけで、ウィキペディアを開きます。 _tap機能では、クリック1つの動作をカスタマイズすることができます。私はそれが助けて欲しい!

関連する問題