你有一个时间服务我添加了圆圈字形,代表2种不同类型的数据。
我已经设法使用此处提供的建议为每个工具提供了不同的工具提示:https://stackoverflow.com/a/37558475/4961888
我希望我可以使用类似的语法将字形的特定子集分配给taptool,这会将我带到这些字形源中的url。
所以我试过了:
fig = figure(x_axis_type="datetime", height=200, tools="tap")
fig.line(x_range, y_range)
news_points = fig.circle(x='timestamp', y='y', fill_color="green", size=5, source=news_source)
url = "@url"
taptool = fig.select(type=TapTool)
taptool.renderers.append(news_points)
taptool.callback = OpenURL(url=url)
但我收到了:
AttributeError: '_list_attr_splat' object has no attribute 'renderers'
在我看来,taptool具有与hovertool不同的分配字形的方式,我在网上找不到关于我的问题的任何文档。如果对包裹有更好抓地力的人可以帮助我绕过它,我会很高兴。
答案 0 :(得分:2)
fig.select
会返回一个列表,因此您想要访问第一个(也是唯一的,我假设的)元素。
fig = figure(x_axis_type="datetime", height=200, tools="tap")
fig.line(x_range, y_range)
news_points = fig.circle(x='timestamp', y='y', fill_color="green", size=5, source=news_source)
url = "@url"
taptool = fig.select(type=TapTool)[0]
taptool.renderers.append(news_points)
taptool.callback = OpenURL(url=url)
OR
fig = figure(x_axis_type="datetime", height=200, tools="tap")
fig.line(x_range, y_range)
news_points = fig.circle(x='timestamp', y='y', fill_color="green", size=5, source=news_source)
url = "@url"
taptool = fig.select_one(TapTool)
taptool.renderers.append(news_points)
taptool.callback = OpenURL(url=url)
答案 1 :(得分:0)
如果使用的是bokeh 0.13.0,则可以通过将渲染器分配为列表来实现。您可以使用taptool.renderers.append(glyph)
taptool.renderers= [glyph,]
一脉相承
fig = figure(x_axis_type="datetime", height=200, tools="tap")
fig.line(x_range, y_range)
news_points = fig.circle(x='timestamp', y='y', fill_color="green", size=5,
source=news_source)
url = "@url"
taptool = fig.select(type=TapTool)[0]
taptool.renderers= [news_points,]
taptool.callback = OpenURL(url=url)```
否则,您可能会得到一个额外的错误str has no attribute append
documentation渲染器还可以接受一个列表,这在图形上有多个渲染器的情况下尤其重要,否则它将占用绘图上的所有渲染器。