首页 > 解决方案 > 颜色表格单元格 - 散景

问题描述

仅当行的单元格的值存在于另一个数据源中时,我才想为行添加颜色。我的意思是,我有列表 A 和表 B,所以如果行的单元格包含来自 A 的值,我想为 B 中的行 X 着色......我什至不知道从哪里开始......

标签: python-2.7bokeh

解决方案


你几乎需要做 ChesuCR 在他们的评论中提到的事情。要更进一步,请参阅下面的小型散景应用程序。

如果您编辑第一个表中的值,将运行回调并检查每个“y”值。需要一个额外的列来跟踪“y”值是否包含在单独的列表/数据源中。然后使用附加列的值为单元格着色。

from bokeh.layouts import row
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, TableColumn, HTMLTemplateFormatter
from bokeh.io import curdoc

def update_included(attr, old, new):
    list_a = [float(a) for a in source_1.data['a']]
    ys = source_2.data['y']
    y_in = []
    for i, y in enumerate(ys):
        if y in list_a:
            y_in.append(1)
        else:
            y_in.append(0)
    print(ys, y_in, list_a)
    source_2.data['y_in'] = y_in

source_1 = ColumnDataSource(data={'a':[1001,1100]})

columns = [
    TableColumn(field="a", title="Criteria list")
]

data_table1 = DataTable(source=source_1, columns=columns, width=400, editable=True)


dict1 = {'x':[0]*6, 
         'y':[0,10,12,13,200,2001], 
         'y_in':[0]*6}

source_2 = ColumnDataSource(data=dict1)

template="""
<div style="background:<%= 
    (function colorfromint(){
        if(y_in == 1){
            return("blue")}
        else{return("red")}
        }()) %>; 
    color: white"> 
<%= value %></div>
"""

formater =  HTMLTemplateFormatter(template=template)
columns = [
    TableColumn(field="x", title="x"),
    TableColumn(field="y", title="y",formatter=formater)
]

data_table2 = DataTable(source=source_2, columns=columns, width=400)

source_1.on_change('data', update_included)
curdoc().add_root(row(data_table1, data_table2))

推荐阅读