Python Bokeh - 使用DataFrame列将HoverToolTip合并到条形图中

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (460)

我的目标是创建一个代表直方图的散景条形图。理想情况下,我希望启用hovertooltips,以便将鼠标悬停在列上将显示该点的总累计值。

我的原始数据框看起来像这样:

           Buckets     Data1_%   Data2_%
0  (0.0166, 0.283]  16.886842 17.242004
1      (0.3, 0.32]   1.111779  1.284348

为了让我使用Data1_%和Data2_%的并排视图制作条形图,我需要以下列方式调用pd.melt():

df_temp = pd.melt(df, id_vars = "Buckets", value_vars = ["Data1_%", "Data2_%"])

然后使数据框看起来像这样:

           Buckets    variable      value
0   (0.0166, 0.283]    Data1_%  16.886842
1       (0.3, 0.32]    Data1_%   1.111779

其中“variable”包含“Data1_%”或“Data2_%”作为两个可能的项目。

最后,我生成我的情节并尝试以这种方式绘制图形:

bar = Bar(df_temp, label = "Buckets", values = "value", group = "variable")
bar.add_tools(HoverTool(tooltips = [("TestValue", "@value")]))
show(bar)

条形图渲染得很好,看起来像这样:

这正是我想要的!悬停工具已启用并可以正常工作,但始终显示“???” 作为值,意味着它没有像我想的那样从我的数据帧(df_temp)中拉出来。

理想情况下,它会显示两个数据点:“变量”字段的值以及“值”字段的值。

因此,对于我的第一个数据点,我希望它能够显示:

变量:Data1_%Value:16.886842

等等。但我很高兴让value参数起作用。

任何提示将非常感谢!我已经尝试阅读有关将我的数据帧更改为ColumnDataSource和其他此类技巧的文档,但我真的很感激能够看到一些关于如何使其工作的代码。

谢谢!

编辑:快速跟进问题。如何在BokehChart上强制执行订购?我希望数据按照我在数据框中列出的顺序显示,但看起来Bokeh有时会淹没这些值并以看似随机的顺序吐出来。我认为Bokeh应该很容易与Dataframes一起使用!

提问于
用户回答回答于

旧的bokeh.charts,包括Bar已被弃用,随后被删除。要在Bokeh中创建直方图(使用工具提示),您应该使用稳定的bokeh.plottingAPI。有很多种方法可以做到这一点,但这里有一个用Bokeh创建的完整示例0.13.0

import numpy as np
from bokeh.plotting import figure, show

measured = np.random.normal(0, 0.5, 1000)
hist, edge = np.histogram(measured, density=True, bins=50)

p = figure(tooltips="top: @top")
p.quad(top=hist, bottom=0, left=edge[:-1], right=edge[1:], line_color="white")

show(p)

扫码关注云+社区

领取腾讯云代金券