我希望客户端根据服务器端的权重和温度列来计算颜色列。
可以使用CustomJSTransform
吗?
以下是图和来源:
plot = figure()
source = ColumnDataSource(data={'x': [1,2,3], 'y': [5,5,6], 'weight': [1,4,1], 'temperature': [10, -20, -15]})
plot.circle(x='x', y='y', source=source)
作为示例,应使用以下逻辑计算颜色列:
def compute_color(data):
if data['weight'] < 4 and data['color'] < 0:
return 'blue'
return 'red'
答案 0 :(得分:1)
是的,尽管CustomJSTransform
通常用于转换为其配置的单个列,但是考虑到您需要它的任何因素,例如CDS中的其他列,没有错。 / p>
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)