Добавить подсказку в Bokeh DataTable - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть пандас DataFrame:

I      A      A2      B      B2
1    'dog'    10    'cat'    20
2    'elf'    15    'egg'    45
3    'hat'    80    'bag'    50

Затем я преобразовал его в таблицу данных Bokeh, но включил только столбцы I, A и B.

Я хотел бы добавитьвсплывающая подсказка для ячеек в столбцах A и B и для отображения соответствующего значения в A2 или B2.Так, например, если бы вы наводили курсор на «собаку», всплывающая подсказка была бы 10, а если бы вы зависали над «сумкой», подсказка была бы 50.

Из того, что я понимаю, нет (пока)способ добавить всплывающую подсказку, используя HoverTool, что можно сделать на точечных графиках и т. д. Но этот ответ предполагает, что возможен обходной путь, хотя в этом примере подсказка показывает только значение, уже отображенное в таблице.Как бы получить всплывающую подсказку для отображения соответствующего значения?

1 Ответ

0 голосов
/ 14 февраля 2019

Класс HTMLTemplateFormatter - это средство форматирования HTML, которое использует строку шаблона, переданную ему как kwarg.Он использует шаблонный метод и синтаксис в Undescorejs для визуализации шаблона.Синтаксис допускает условную визуализацию шаблона if-else и позволяет использовать значения из других столбцов, напрямую передавая имена столбцов в шаблоне.Мы будем использовать эту информацию для определения нашего шаблона на основе условия, указанного в вашем вопросе, то есть для получения заголовка всплывающей подсказки из соседнего столбца, если столбцы A и B.

Примечание : значения вмои данные были без кавычек ('') .Например, у меня было dog вместо 'dog'.DataTable выглядит аккуратно без них:).

Приведенный ниже код вдохновлен связанным ответом на ваш вопрос и выполняет следующие шаги:

  • загружает фрейм данных из файла CSV bokeh.csv : df2,
  • определяет источник данных для таблицы данных: source,
  • определяет шаблон с необходимыми условиями для отображения всплывающей подсказки и значения строкидля каждого столбца: template,
  • определяет столбцы: Columns с HTMLTemplateFormatter для TableColumn рендеринга с template,
  • рендеринга DataTable: data_table,
  • показать data_table.

Код :

Обратите внимание, что в строке template используются условные операторы с именами столбцов, которые используются непосредственно для сравнения,рендеринг заголовка всплывающей подсказки и значений строк.

import pandas as pd
from bokeh.models.widgets import DataTable, TableColumn, HTMLTemplateFormatter
from bokeh.models import ColumnDataSource
from bokeh.io import show

df2 = pd.read_csv('bokeh.csv')
source = ColumnDataSource(df2)    
template = """<% if (value==A) {%>
     <span href="#" data-toggle="tooltip" title="<%= A2 %>"><%= value %></span>
<%}
else if (value==B){%>
    <span href="#" data-toggle="tooltip" title="<%= B2 %>"><%= value %></span>
<%} 
else {%>
    <span href="#"><%= value %></span>
<%}%>"""

Columns = [TableColumn(field=Ci, title=Ci, width=20, formatter=HTMLTemplateFormatter(template=template)) for Ci in df2.columns]
data_table = DataTable(source=source, columns=Columns, width=400, height=280)

show(data_table)
...