Класс 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)