我有一个熊猫DataFrame:
related
然后我将其转换为Bokeh数据表,但仅包含I,A和B列。
我想为A和B列中的单元格添加一个工具提示,并在A2或B2中显示相应的值。因此,例如,如果您将鼠标悬停在“狗”上,则工具提示将为10;如果将鼠标悬停在“袋子”上,则工具提示将为50。
据我了解,还没有一种方法可以使用HoverTool添加工具提示,该方法可以在散点图等上完成。但是this answer提出了一种解决方法,尽管在该示例中工具提示仅显示表格中已经显示的值。我将如何获得工具提示以显示相应的值呢?
答案 0 :(得分:2)
HTMLTemplateFormatter类是HTML格式化程序,它使用作为kwarg
传递给它的模板字符串。它使用template method and syntax in Undescorejs渲染模板。该语法允许模板的if-else条件渲染,并允许通过直接在模板中传递列名来使用其他列的值。我们将根据您的问题中指定的条件使用此信息来定义模板,即,如果列为A和B,则从相邻列获取工具提示标题。
注意:我的数据框中的值没有反逗号('')。例如,我有dog
而不是'dog'
。没有它们,DataTable看起来更整洁:)。
以下代码受您问题中链接的答案的启发,并执行以下步骤:
df2
,source
,template
,Columns
定义列:HTMLTemplateFormatter
和TableColumn
,用template
渲染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)
字符串使用条件语句,其列名直接用于比较,工具提示标题和行值的呈现。
const getStepData = (id) => {
return async dispatch => {
try {
dispatch(fetchStepBegin());
const res = await DataService.fetchStepData(id);
const sortedTask = sortedTaskData(res)
const sortedStepData = sortStepData(res)
const newData = createSortedDataForDragAndDrop(sortedTask, sortedStepData)
dispatch(fetchRawStepDataSuccess(res.data))
dispatch(fetchStepDataSuccess(newData))
}
catch (err) {
dispatch(fetchStepError(err))
throw (err)
}
}
}