Python Bokeh - 将taptool分配给字形的子集

时间:2017-04-07 17:13:31

标签: python bokeh

你有一个时间服务我添加了圆圈字形,代表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不同的分配字形的方式,我在网上找不到关于我的问题的任何文档。如果对包裹有更好抓地力的人可以帮助我绕过它,我会很高兴。

2 个答案:

答案 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渲染器还可以接受一个列表,这在图形上有多个渲染器的情况下尤其重要,否则它将占用绘图上的所有渲染器。

相关问题