Python 将悬停添加到带有多个垂直条的绘图
因此,我基本上遵循了bokeh文档网站上关于处理分类数据的示例: 最终我得到了以下代码(我简化了一点): 其中数据列有4个键,大陆为“类别”,2016年、2017年和2018年为对应于大陆列表中每个大陆的值列表。例如: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
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")