Как добиться вычисления на стороне клиента столбца данных? - PullRequest
1 голос
/ 13 мая 2019

Я бы хотел, чтобы клиент вычислял цветовой столбец на основе столбца веса и температуры на стороне сервера.

Возможно ли это с помощью 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 Ответ

1 голос
/ 14 мая 2019

Да, хотя 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)

enter image description here

...