色表单元格-背景虚化

时间:2018-12-03 18:27:47

标签: python-2.7 bokeh

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

1 个答案:

答案 0 :(得分:0)

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

如果您在第一个表中编辑值,则将运行回调并检查每个“ 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))