Bokeh悬停工具提示不显示所有数据 - Ipython笔记本

时间:2015-07-05 00:05:27

标签: python pandas ipython-notebook bokeh

我正在尝试使用Bokeh并混合代码片段。我从Pandas DataFrame创建了下面的图表,它使用我想要的所有工具元素正确显示图表。但是,工具提示部分显示数据。

这是图表:

bokeh chart with tooltip

这是我的代码:

from bokeh.plotting import figure, show
from bokeh.io import output_notebook
from bokeh.models import HoverTool
from collections import OrderedDict

x  = yearly_DF.index
y0 = yearly_DF.weight.values
y1 = yearly_DF.muscle_weight.values
y2 = yearly_DF.bodyfat_p.values

#output_notebook()

p = figure(plot_width=1000, plot_height=600,
           tools="pan,box_zoom,reset,resize,save,crosshair,hover", 
           title="Annual Weight Change",
           x_axis_label='Year', 
           y_axis_label='Weight',
           toolbar_location="left"
          )

hover = p.select(dict(type=HoverTool))
hover.tooltips = OrderedDict([('Year', '@x'),('Total Weight', '@y0'), ('Muscle Mass', '$y1'), ('BodyFat','$y2')])

output_notebook()

p.line(x, y0, legend="Weight")
p.line(x, y1, legend="Muscle Mass", line_color="red")

show(p)  

我已经使用Firefox 39.0,Chrome 43.0.2357.130(64位)和Safari 8.0.7进行了测试。我已经清除了缓存,并且在所有浏览器中都出现了相同的错误。我也做了pip install bokeh --upgrade以确保我运行的是最新版本。

2 个答案:

答案 0 :(得分:12)

尝试使用ColumnDataSource

悬停工具需要具有对数据源的访问权限,以便它可以显示信息。 @x@y是数据单元中的x-y值。 (@前缀是特殊的,只能跟随一组有限的变量,@y2不是其中之一。),通常我会使用$ + column_name来显示我的值兴趣,例如$weight。有关详细信息,请参阅here

此外,我很惊讶悬停会出现。我认为hoverTool不能使用行字形,如上所述here

尝试以下方法:(我还没有测试过,可能会有拼写错误。)

df = yearly_DF.reset_index() # move index to column.
source = ColumnDataSource(ColumnDataSource.from_df(df)

hover.tooltips = OrderedDict([('x', '@x'),('y', '@y'), ('year', '$index'), ('weight','$weight'), ('muscle_weight','$muscle_weight'), ('body_fat','$bodyfat_p')])

p.line(x='index', y='weight', source=source, legend="Weight")
p.line(x='index', y='muscle_weight', source=source, legend="Muscle Mass", line_color="red")

答案 1 :(得分:1)

您使用的是Firefox吗?这是一些旧版FF的报告问题:

https://github.com/bokeh/bokeh/issues/1981

https://github.com/bokeh/bokeh/issues/2122

升级FF解决了这个问题。