因此,我基本上遵循了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件东西。现在,我想做的就是将悬停添加到这些不同的竖线中,这样,如果我悬停某个竖线,它就会为我提供该年份/大陆的数字计数。这可能吗?
答案 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")
答案 1 :(得分:0)
感谢@bigreddot提供答案!我想补充一点,我一直在努力。确保name
参数的值与top
参数的值相同。 @$name
使用字符串文字(即name
参数的值)来查找该名称列的源。如果存在不匹配,则您将得到错误的值,或者如果???
的值与源中的任何列名都不匹配,则会得到name
。
我在下图中覆盖了弹出窗口: Bokeh vbar dodge unrendered values