Bokeh中的数据工具提示不显示数据,显示'???' 代替

Uri*_*Uri 5 python tooltip hover stacked-chart bokeh

我正在尝试使用Bokeh创建堆积条形图.我想使用悬停功能,在条形的每个部分显示相关数据,但不是数据Bokeh显示'???'.

我在名为"Sales"的工作表中获得了名为"Example worksheet"的excel文件中的数据.表格如下:

Year    Category    Sales
2016    A           1
2016    B           1
2016    C           1.5
2017    A           2
2017    B           3
2017    C           1
2018    A           2.5
2018    B           3
2018    C           2
Run Code Online (Sandbox Code Playgroud)

我尝试运行以下代码:

import numpy as np
import scipy as sp
from bokeh.charts import Bar, output_file, show
from bokeh.models import HoverTool
import pandas as pd

x = pd.read_excel('Example worksheet.xlsx', 'Sales')
bar = Bar(x, label = 'Year', values = 'Sales', agg = 'sum', stack = 'Category', tools='hover')
hover = bar.select(dict(type=HoverTool))
source = x
hover.tooltips = [('Category', '@Category'),('Sales', '@Sales')]
output_file("Expected Sales.html")
show(bar)
Run Code Online (Sandbox Code Playgroud)

运行后,我在Python控制台中收到以下消息(我不认为它与主题相关,但无论如何我都说了):

(process:4789): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
Run Code Online (Sandbox Code Playgroud)

然后在浏览器上我得到以下图表:

堆积的条形图

如您所见,数据被问号取代.我在FF 41.0.1和Chromium 45.0.2454.101上得到了这个结果,在Ubuntu 15.04(64位)上运行.

我阅读了Bokeh教程http://bokeh.pydata.org/en/latest/docs/user_guide/tools.html#hovertool,但它没有引用条形图.我也在Stackoverflow上发现了这个: Bokeh悬停工具提示没有显示所有数据 - Ipython笔记本.问题可能是相关的,但坦率地说,我不太明白答案.

Bla*_*ane 5

我遇到了同样的问题。我发现这个参考很有用。Sales 的工具提示将使用 generic @height,例如: hover.tooltips = [('Sales', '@height')]

同样,替换@heightwith@y将为您提供每年的总销售额。我还没有弄清楚如何使用工具提示来访问堆叠类别或如何使用链接中引用的 ColumnDataSource。


Lui*_*uel 2

我能够重现您的问题并找到解决方案。首先,重建你的DF:

data = [k.split() for k in 
'''2016    A           1
2016    B           1
2016    C           1.5
2017    A           2
2017    B           3
2017    C           1
2018    A           2.5
2018    B           3
2018    C           2'''.split('\n')]

x = pd.DataFrame(data, columns = ['year','category','sales'])
x['year']  = x['year'].astype(object)
x['sales'] = x['sales'].astype(float)
Run Code Online (Sandbox Code Playgroud)

现在解决方案:

from bokeh.charts import Bar, output_file, show
from bokeh.models import HoverTool
from bokeh.models import ColumnDataSource    

source = ColumnDataSource(x)

bar = Bar(x, label='year', values='sales', agg='sum', stack='category', title="Expected Sales by year", tools = 'hover')
hover = bar.select(dict(type=HoverTool))
hover.tooltips = [('Year', '@x'),('Sales', '@y')]
show(bar)
Run Code Online (Sandbox Code Playgroud)

生成以下图表:

散景工具提示不显示数据

添加:

类 ColumnDataSource(*args, **kw)

可能是解决方案中最重要的部分(您可以在此处阅读更多相关信息)。