用于不同线条的多个 HoverTools(散景)

Posted

技术标签:

【中文标题】用于不同线条的多个 HoverTools(散景)【英文标题】:Multiple HoverTools for different lines (bokeh) 【发布时间】:2018-08-23 05:43:26 【问题描述】:

我在散景图上有不止一条线,我希望 HoverTool 显示每条线的值,但使用上一个 *** 答案中的方法不起作用:

https://***.com/a/27549243/3087409

这是来自该答案的相关代码 sn-p:

fig = bp.figure(tools="reset,hover")
s1 = fig.scatter(x=x,y=y1,color='#0000ff',size=10,legend='sine')
s1.select(dict(type=HoverTool)).tooltips = "x":"$x", "y":"$y"
s2 = fig.scatter(x=x,y=y2,color='#ff0000',size=10,legend='cosine')
fig.select(dict(type=HoverTool)).tooltips = "x":"$x", "y":"$y"

这是我的代码:

from bokeh.models import HoverTool
from bokeh.plotting import figure

source = ColumnDataSource(data=dict(
    x = [list of datetimes]
    wind = [some list]
    coal = [some other list]
    )
)

hover = HoverTool(mode = "vline")

plot = figure(tools=[hover], toolbar_location=None,
    x_axis_type='datetime')

plot.line('x', 'wind')
plot.select(dict(type=HoverTool)).tooltips = "y":"@wind"
plot.line('x', 'coal')
plot.select(dict(type=HoverTool)).tooltips = "y":"@coal"

据我所知,它相当于我链接到的答案中的代码,但是当我将鼠标悬停在该图上时,两个悬停工具框都显示相同的值,即 wind 的值。

【问题讨论】:

【参考方案1】:

您需要为每个绘图添加渲染器。检查这个。也不要使用 samey label 来更改名称。

from bokeh.models import HoverTool
from bokeh.plotting import figure

source = ColumnDataSource(data=df)

plot = figure(x_axis_type='datetime',plot_width=800, plot_height=300)

plot1 =plot.line(x='x',y= 'wind',source=source,color='blue')
plot.add_tools(HoverTool(renderers=[plot1], tooltips=[('wind',"@wind")],mode='vline'))

plot2 = plot.line(x='x',y= 'coal',source=source,color='red')
plot.add_tools(HoverTool(renderers=[plot2], tooltips=[("coal","@coal")],mode='vline'))

show(plot)

输出如下所示。

【讨论】:

谢谢,这行得通。它还与我链接的页面上的另一个答案相关:***.com/a/34534995/3087409 @user3087409 是的,基本概念是相同的,而解决方案是针对这个问题的。你还说它对你不起作用。因此将代码更改为您的方案并发布。

以上是关于用于不同线条的多个 HoverTools(散景)的主要内容,如果未能解决你的问题,请参考以下文章

如何为控制多个散景图形添加一个图例?

在Flask中嵌入散景图

散景:多折线图中的图外图例

散景图上的多个滑块

在布局中绘制多个图表的散景会引发错误:(BOTH_CHILD_AND_ROOT)

使用散景绘图与kafka流媒体