如何根据另一个列值格式化散景数据表单元格?

How to format a bokeh DataTable cell based on another column value?

致意。

我正在使用 bokeh 服务器(版本 0.12.13)开发一个应用程序,并且我有一个包含多个列的 DataTable 小部件。其中一个是问题开放天数的度量,另一个是关闭此类问题的估计天数。

在某些情况下,问题打开的天数超过了估计的天数,如果发生这种情况,我想将估计的天数列涂成红色。

我试过使用 "widget.HTMLTemplateFormatter",但我还没有弄清楚如何访问另一个列值来进行比较并决定是否将单元格涂成红色。

有谁知道如何解决这个问题?

您可以在下划线 js 代码中定义一个 javascript 函数来有条件地为每个单元格着色。可以访问链接到 table 的数据源中的每个字段。

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

dict1 = {'estd':[1]*6,
         'actd':[1, 1, 1, 2, 2, 2],
         'z'   :[3, 3, 3, 3, 3, 3]}

source = ColumnDataSource(data=dict1)

template="""
<b><div style="background:<%= 
    (function colorfromint(){
        if(actd > estd){
            return("Red")
        }
        else{
            return("White")
        }
     }()) %>;">
<%= (value).toFixed(1) %></div></b>
"""

formater =  HTMLTemplateFormatter(template=template)
columns = [
    TableColumn(field="estd", title="Estimated Days"),
    TableColumn(field="actd", title="Actual days",formatter=formater),
    TableColumn(field="z", title="z")
]

data_table = DataTable(source=source, columns=columns, width=800)

show(data_table)

如果数据不变,您可以使用 python 代码定义颜色,请参阅此处的第二个示例:.