Python 将悬停添加到带有多个垂直条的绘图

Python 将悬停添加到带有多个垂直条的绘图,python,bokeh,Python,Bokeh,因此,我基本上遵循了bokeh文档网站上关于处理分类数据的示例: 最终我得到了以下代码(我简化了一点): 其中数据列有4个键,大陆为“类别”,2016年、2017年和2018年为对应于大陆列表中每个大陆的值列表。例如: continents = ["Africa", "Europe"] list2016 = ["1", "3"] list2017 = ["4", "2"] list2018 = ["14", "3"] 因此,基本上,非洲在2016年、2017年和2018年分别有1、4和14

因此,我基本上遵循了bokeh文档网站上关于处理分类数据的示例:

最终我得到了以下代码(我简化了一点):

其中数据列有4个键,大陆为“类别”,2016年、2017年和2018年为对应于大陆列表中每个大陆的值列表。例如:

continents = ["Africa", "Europe"]
list2016 = ["1", "3"] 
list2017 = ["4", "2"]
list2018 = ["14", "3"]

因此,基本上,非洲在2016年、2017年和2018年分别有1、4和14件事情。现在,我想做的是将悬停添加到这些不同的垂直条上,这样,如果我悬停在某个条上,它会给出该年/大陆的数值。这可能吗

由于
0.13
,您可以为每个图示符指定一个
名称
值,然后在工具提示中将其称为
$name
。此外,您还可以使用
@$name
从具有该名称的列中查找。您还可以方便地将
工具提示
直接传递到
。总而言之:

p = figure(x_range=continents, y_range=(0, 20), plot_height=250,
           title="University count per continent per year",
           toolbar_location=None, tools="hover", 
           tooltips="@continents $name: @$name")

p.vbar(x=dodge('continents', -0.25, range=p.x_range), top='2016', width=0.2, source=source,
       color="#c9d9d3", legend=value("2016"), name="2016")

p.vbar(x=dodge('continents',  0.0,  range=p.x_range), top='2017', width=0.2, source=source,
       color="#718dbf", legend=value("2017"), name="2017")

p.vbar(x=dodge('continents',  0.25, range=p.x_range), top='2018', width=0.2, source=source,
       color="#e84d60", legend=value("2018"), name="2018")

谢谢@bigreddot的回答!我想补充一点,这是我一直在努力解决的重要问题。确保
name
参数的值与
top
参数的值相同。
@$name
使用字符串文字(即
name
参数的值)查找该名称列的源。如果存在不匹配,则会得到错误的值,或者如果
名称的值与源中的任何列名不匹配,则会得到

我已将弹出窗口覆盖在下图中:

非常好,谢谢你,伙计!这背后的逻辑究竟是什么?美元是什么意思?
@
表示来自特定列的数据,例如,
@sale
表示从“sales”列获取数据。
$
变量是一些特殊的已知变量,例如鼠标x位置的
$x
,或点击图示符的“name”属性值的
$name
@$name
组合了这两种方法——查找一列,但使用特殊变量
$name
的值作为列名(即间接级别)
p = figure(x_range=continents, y_range=(0, 20), plot_height=250,
           title="University count per continent per year",
           toolbar_location=None, tools="hover", 
           tooltips="@continents $name: @$name")

p.vbar(x=dodge('continents', -0.25, range=p.x_range), top='2016', width=0.2, source=source,
       color="#c9d9d3", legend=value("2016"), name="2016")

p.vbar(x=dodge('continents',  0.0,  range=p.x_range), top='2017', width=0.2, source=source,
       color="#718dbf", legend=value("2017"), name="2017")

p.vbar(x=dodge('continents',  0.25, range=p.x_range), top='2018', width=0.2, source=source,
       color="#e84d60", legend=value("2018"), name="2018")