将悬停添加到具有多个垂直条Bokeh

时间:2018-06-19 21:55:31

标签: python bokeh

因此,我基本上遵循了bokeh文档站点上有关处理分类数据的示例:https://bokeh.pydata.org/en/latest/docs/user_guide/categorical.html

我以这段代码结束了我的工作(我简化了一点):

# dictionary with data for making a figure
data = {'continents' : continents,
        '2016' : list2016,
        '2017' : list2017,
        '2018' : list2018 }


source = ColumnDataSource(data=data)

p = figure(x_range=continents, y_range=(0, 450), plot_height=250, title="University count per continent per year",
           toolbar_location=None, tools="")

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

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

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

p.x_range.range_padding = 0.1
p.xgrid.grid_line_color = None
p.legend.location = "top_right"
p.legend.orientation = "horizontal"

数据列有4个键的地方,大洲是“类别”,而2016、2017和2018是与大洲列表中每个大洲相对应的值的列表。例如:

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

所以基本上,非洲在2016年,2017年和2018年分别拥有1、4和14件东西。现在,我想做的就是将悬停添加到这些不同的竖线中,这样,如果我悬停某个竖线,它就会为我提供该年份/大陆的数字计数。这可能吗?

2 个答案:

答案 0 :(得分:3)

0.13起,您可以为每个字形赋予一个name值,然后在工具提示中将该值称为$name。另外,您可以使用@$name从具有该名称的列中查找。为了方便起见,您也可以直接将tooltips传递给figure。在一起:

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")

enter image description here

答案 1 :(得分:0)

感谢@bigreddot提供答案!我想补充一点,我一直在努力。确保name参数的值与top参数的值相同。 @$name使用字符串文字(即name参数的值)来查找该名称列的源。如果存在不匹配,则您将得到错误的值,或者如果???的值与源中的任何列名都不匹配,则会得到name

我在下图中覆盖了弹出窗口: Bokeh vbar dodge unrendered values