Да, хотя CustomJSTransform
обычно используется для преобразования отдельного столбца, для которого он настроен, нет ничего плохого в том, чтобы учесть все факторы, которые вам нужны, например, другие столбцы в CDS:
from bokeh.io import show
from bokeh.models import ColumnDataSource, CustomJSTransform
from bokeh.transform import transform
from bokeh.plotting import figure
plot = figure()
source = ColumnDataSource(data={'x': [1,2,3], 'y': [5,5,6], 'weight': [1,4,1], 'temperature': [10, -20, -15]})
cmap = CustomJSTransform(args=dict(source=source), v_func="""
const res = new Array(xs.length)
const weight = source.data.weight
const temp = source.data.temperature
for (let i = 0; i < xs.length; i++) {
if (weight[i] < 4 && temp[i] < 0) {
res[i] = "red"
} else {
res[i] = "blue"
}
}
return res
""")
plot.circle(x='x', y='y', color=transform('x', cmap), source=source, size=20)
show(plot)