如何实现数据列的客户端计算?

时间:2019-05-13 11:48:17

标签: bokeh

我希望客户端根据服务器端的权重和温度列来计算颜色列。

可以使用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'

1 个答案:

答案 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)

enter image description here