Цвет таблицы ячеек - боке - PullRequest
       10

Цвет таблицы ячеек - боке

0 голосов
/ 03 декабря 2018

Я хочу добавить цвет в строку, только если значение ячейки строки присутствует в другом источнике данных.Я имею в виду, у меня есть список A и таблица B, поэтому я хочу покрасить строку X в B, если ячейка строки содержит значение из A ... Я даже не знаю, с чего начать.

1 Ответ

0 голосов
/ 04 декабря 2018

В значительной степени вам нужно сделать то, что 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))
...