【问题标题】:Data tooltips in Bokeh don't show data, showing '???' insteadBokeh 中的数据工具提示不显示数据,显示“???”反而
【发布时间】:2016-01-06 12:00:31
【问题描述】:

来自维护者的注意事项:这个问题与几年前被删除的过时的bokeh.charts API 有关。有关现代散景中带有条形图的悬停工具的信息,请参阅此部分:

https://docs.bokeh.org/en/latest/docs/user_guide/categorical.html#hover-tools


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

我在一个名为“示例工作表”的 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

我尝试运行以下代码:

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)

运行后,我在 Python 控制台中收到以下消息(我认为它与主题无关,但我还是放了它):

(process:4789): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed

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

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

我阅读了散景教程 http://docs.bokeh.org/en/latest/docs/user_guide/tools.html#hovertool

但它不指条形图。我还在 Stackoverflow 上找到了这个:

Bokeh hover tooltip not displaying all data - Ipython notebook.

这个问题可能是相关的,但坦率地说我不太明白答案。

【问题讨论】:

  • 您找到问题的解决方案了吗?
  • 是的,你的回答成功了。谢谢!
  • 谢谢@Uri!请接受我的回答并投票以关闭它并为您和我添加积分。最好的问候!

标签: python hover tooltip bokeh stacked-chart


【解决方案1】:

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

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

【讨论】:

    【解决方案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)
    

    现在解决办法:

    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)
    

    生成以下图表:

    添加:

    类 ColumnDataSource(*args, **kw)

    可能是解决方案中最重要的部分(您可以阅读更多关于它的信息here)。

    【讨论】:

    • @height、$x、$y、@x、@y具体指的是什么。似乎我可以弹出的唯一数据是值和标签。
    • 我不明白source = ColumnDataSource(x) 在做什么,因为source 根本没有被使用。你能详细说明一下吗?
    • 我遇到了类似的问题,但是在查看此解决方案时,悬停工具实际上显示的所有值都是错误的。 B + 2018 不是 4,而是 3。为什么 Bokeh 会这样做?之前发布过:stackoverflow.com/questions/50461615/…
    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多