Всплывающие подсказки к данным в боке не отображают данные, показывая "???" вместо

Примечание специалистов по сопровождению: этот вопрос касается устаревшего bokeh.charts API, который был удален несколько лет назад. Информацию об инструментах наведения с гистограммами в современном боке см. В этом разделе:

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


Я пытаюсь создать столбчатую диаграмму с накоплением с помощью боке. Я хотел бы использовать функцию наведения, отображающую соответствующие данные в каждой части панели, но вместо данных Боке показывает «???».

Я получил данные в файле 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

И тогда в браузере я получаю следующую диаграмму:

Гистограмма с накоплением

Как видите, данные заменены вопросительными знаками. Я получил этот результат как на FF 41.0.1, так и на Chromium 45.0.2454.101, работающих на Ubuntu 15.04 (64-разрядная версия).

Я прочитал учебник по боке http://docs.bokeh.org/en/latest/docs/user_guide/tools.html#hovertool

но это не относится к гистограммам. Я также нашел это в Stackoverflow:

всплывающая подсказка при наведении курсора боке не отображает все данные - блокнот Ipython .

Вопрос может быть связан, но, честно говоря, я не совсем понял ответа.


person Uri    schedule 08.10.2015    source источник
comment
вы нашли решение своего вопроса?   -  person Luis Miguel    schedule 16.01.2016
comment
Да, ваш ответ сработал. Спасибо!   -  person Uri    schedule 19.01.2016
comment
Спасибо @Uri! Пожалуйста, примите мой ответ и проголосуйте за него, чтобы закрыть его и получить добавленные баллы вам и мне. С наилучшими пожеланиями!   -  person Luis Miguel    schedule 20.01.2016


Ответы (2)


У меня была такая же проблема. Я нашел этот справочник полезным. Во всплывающей подсказке для продаж будет использоваться общий @height, например: hover.tooltips = [('Sales', '@height')]

Точно так же замена @height на @y даст вам общий объем продаж за каждый год. Я не понял, как использовать всплывающую подсказку для доступа к сложенным категориям или как использовать ColumnDataSource, упомянутый в ссылке.

person Blane    schedule 05.01.2016

Мне удалось воссоздать вашу проблему и найти решение. Во-первых, воссоздание вашего 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 (* аргументы, ** кВт)

вероятно, самая важная часть решения (подробнее об этом вы можете прочитать здесь).

person Luis Miguel    schedule 04.01.2016
comment
К чему конкретно относятся @height, $ x, $ y, @x, @y. Похоже, что единственные данные, которые у меня могут быть всплывающими, - это значения и метка. - person boson; 27.10.2016
comment
Я не понимаю, что делает source = ColumnDataSource(x), потому что source вообще не используется. Не могли бы вы уточнить? - person bluenote10; 13.03.2017
comment
У меня аналогичная проблема, однако, глядя на это решение, инструмент наведения на самом деле отображает неправильные значения для всех из них. B + 2018 - это не 4, а 3. Почему такое боке? Размещено ранее: stackoverflow.com/questions/ 50461615 / - person AdrianC; 22.05.2018