Я хочу раскрасить текст определенной строки в DataTable в боке. Цвет должен зависеть от записи в массиве цветов (например, при использовании графика в боке)
Я настроил свой код следующим образом:
source = ColumnDataSource(data=dict(
neighbors=[],
words=[],
ref_fragments=[],
closest=[],
distances=[],
color=[]
))
columns = [TableColumn(field='neighbors', title='Neighbor Fragment', width=100),
TableColumn(field='words', title='Word', width=100),
TableColumn(field='ref_fragments', title='Reference Fragment', width=100),
TableColumn(field='closest', title='Closest Words', width=200),
TableColumn(field='distances', title='Distances', width=300)]
table = DataTable(source=source, columns=columns, width=800, height=800)
Источник будет заполнен во время взаимодействия во время выполнения. При использовании графика в боке было бы легко просто использовать атрибут «цвет» в источнике для соответствующего окрашивания точек. К сожалению, это не работает с DataTables.
Вопрос и ответ на Stackoverflow (https://stackoverflow.com/a/51048558/3220400)
template = """
<p style = "color:<%=
(function colorfromarry(){
//HERE CODE THAT SETS COLOR SPECIFIC TO THE ENTRY IN THE COLOR ENTRY OF ITS ROW
}()) %>;">
<%= value %>
</p>
"""
formatter = HTMLTemplateFormatter(template=template)
а затем я могу использовать средство форматирования для определенного столбца. В моем случае я бы предположил, что мне нужно использовать один и тот же форматтер для каждого столбца? Мой вопрос заключается в том, как установить функцию colorfromarry, чтобы каждая запись в строке получала цвет, характерный для записи в массиве (например, строка i смотрит на цвет [i])?
Установите один и тот же форматтер для всех столбцов:
from bokeh.io import output_notebook, show
output_notebook()
from random import randint
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn, HTMLTemplateFormatter
output_file("data_table.html")
template = """<div style = "color: <%= color %>"><%= value %></div>"""
formatter = HTMLTemplateFormatter(template=template)
source = ColumnDataSource(data=dict(
neighbors=[1, 2, 3],
words=["a", "b", "c"],
ref_fragments=["x", "y", "z"],
closest=["A", "B", "C"],
distances=[10, 20, 30],
color=["#ff0000", "#00ff00", "#0000ff"]
))
columns = [
TableColumn(field='neighbors', title='Neighbor Fragment', width=100, formatter=formatter),
TableColumn(field='words', title='Word', width=100, formatter=formatter),
TableColumn(field='ref_fragments', title='Reference Fragment', width=100, formatter=formatter),
TableColumn(field='closest', title='Closest Words', width=200, formatter=formatter),
TableColumn(field='distances', title='Distances', width=300, formatter=formatter)
]
table = DataTable(source=source, columns=columns, width=800, height=800)
show(widgetbox(table))
отлично! Большое спасибо!