使散景的自定义 TapTool 适用于全息视图
Make bokeh's custom TapTool work for holoviews
我想使用散景 TapTool
在单击每个 holoviews.Polygons
时打开不同的 URL。 bokeh docs 是点数据的一个完美例子,它在散景中是如何工作的。但是,当我尝试在全息视图中使用它时,它似乎不起作用。
我能开始工作的最接近的事情是:
import geoviews as gv
from bokeh.models import OpenURL, TapTool
url = 'https://google.@domain'
taptool = TapTool()
taptool.callback = OpenURL(url=url)
p = gv.Polygons(data, vdims=['Area', 'domain'], crs=ccrs.PlateCarree).options(alpha=1, tools=['hover', taptool])
p
情节很好,URL 开头的触发工作正常,但是“@domain”的解析不起作用,URL 是“google。???
这里有什么问题?
不确定;当我为这个荒谬的例子做这件事时似乎有效:
import holoviews as hv, numpy as np
hv.extension("bokeh")
def rectangle(x=0, y=0, width=.05, height=.05):
return np.array([(x,y), (x+width, y), (x+width, y+height), (x, y+height)])
polys = hv.Polygons([{('x', 'y'): rectangle(x, y), 'level': z}
for x, y, z in np.random.rand(100, 3)], vdims='level')
url = 'https://google.@level'
taptool = TapTool()
taptool.callback = OpenURL(url=url)
polys.opts(color='level', line_width=1, tools=['hover', taptool])
您可以使用 hook
选项在全息视图中访问散景 figure
,如 in the HoloViews docs here 所述。
通过访问散景图,您可以执行诸如连接任意回调之类的操作。
例如,在 python 回调中访问光标坐标,或处理 Tap 事件:
import holoviews as hv
from bokeh.events import MouseMove, Tap
def hook(plot, element):
# allows access to the bokeh `figure` object
# so we can bind figure interaction events
plot.state.on_event(MouseMove, on_mouse_move)
plot.state.on_event(Tap, on_click)
# The handles contain common plot objects
# plot.handles
def on_mouse_move(event):
# do something
def on_click(event):
# do something
my_hv_plot = hv.Points([])
my_hv_plot.opts(hooks=[hook])
我想使用散景 TapTool
在单击每个 holoviews.Polygons
时打开不同的 URL。 bokeh docs 是点数据的一个完美例子,它在散景中是如何工作的。但是,当我尝试在全息视图中使用它时,它似乎不起作用。
我能开始工作的最接近的事情是:
import geoviews as gv
from bokeh.models import OpenURL, TapTool
url = 'https://google.@domain'
taptool = TapTool()
taptool.callback = OpenURL(url=url)
p = gv.Polygons(data, vdims=['Area', 'domain'], crs=ccrs.PlateCarree).options(alpha=1, tools=['hover', taptool])
p
情节很好,URL 开头的触发工作正常,但是“@domain”的解析不起作用,URL 是“google。??? 这里有什么问题?
不确定;当我为这个荒谬的例子做这件事时似乎有效:
import holoviews as hv, numpy as np
hv.extension("bokeh")
def rectangle(x=0, y=0, width=.05, height=.05):
return np.array([(x,y), (x+width, y), (x+width, y+height), (x, y+height)])
polys = hv.Polygons([{('x', 'y'): rectangle(x, y), 'level': z}
for x, y, z in np.random.rand(100, 3)], vdims='level')
url = 'https://google.@level'
taptool = TapTool()
taptool.callback = OpenURL(url=url)
polys.opts(color='level', line_width=1, tools=['hover', taptool])
您可以使用 hook
选项在全息视图中访问散景 figure
,如 in the HoloViews docs here 所述。
通过访问散景图,您可以执行诸如连接任意回调之类的操作。 例如,在 python 回调中访问光标坐标,或处理 Tap 事件:
import holoviews as hv
from bokeh.events import MouseMove, Tap
def hook(plot, element):
# allows access to the bokeh `figure` object
# so we can bind figure interaction events
plot.state.on_event(MouseMove, on_mouse_move)
plot.state.on_event(Tap, on_click)
# The handles contain common plot objects
# plot.handles
def on_mouse_move(event):
# do something
def on_click(event):
# do something
my_hv_plot = hv.Points([])
my_hv_plot.opts(hooks=[hook])