Я пытаюсь адаптировать пример слайдера цвета боке, который можно найти здесь: https://docs.bokeh.org/en/ последний/docs/examples/interaction/js_callbacks/color_sliders.html. Идея состоит в том, чтобы иметь два ползунка: «Часы работы» и «Месяц». При изменении значений в ползунке должно отображаться значение, похожее на шестнадцатеричный код цвета в примере галереи боке, но это должна быть запись фактора в приведенном ниже фрейме данных.
Dataframe
Базовый фрейм данных имеет вид:
[img]https://i. sstatic.net/3GFpZnEl.png[/img]
Выбор «фактора»
Фактор Значение, которое должно отображаться в прямоугольнике боке для значений ползунка «месяц = M» и «Часы работы = R», должно быть значением в столбце «Фактор» df, где df.Month == M и наибольшее количество часов работы, такое что df['Runs Часы']
Год
Месяц
Импорт
Часы работы
Фактор
2024
2
40,0398
41,0
1,0239811
2023
2
37,1329
44,61.2010879
2022
2
34,6993
53,8
1,5504635
2021
2
31,9609
73,62.3028137
на данный момент
В настоящее время у меня есть приведенный ниже пример, который не совсем верен - он создает два ползунка и прямоугольник/текст почти так, как ожидалось, за исключением того, что он показывает все факторы ценности (т. весь столбец в виде строк, разделенных запятыми), а изменение ползунков ничего не дает. Если бы ползунки были на M=2 и R=55, я бы ожидал увидеть 1,5504635 в поле рядом с ползунками.
Код: Выделить всё
source = ColumnDataSource(data = {'Year':[tuple(df.Year)], 'Month':[tuple(df.Month)], 'Rhours':[tuple(df['Runs Hours'])], 'Factor':[tuple(df.Factor)]})
# create first plot, as a rect() glyph and centered text label, with fill and text color taken from source
p = figure(x_range=(-8, 8), y_range=(-4, 4), width=400, height=300, title='Move sliders to change', tools='')
p.rect(0, 0, width=18, height=10, fill_color=f'{ff.Forsa_Blue[0]}', line_color = 'black', source=source)
p.text(0, 0, text='Factor', text_color='Black', alpha=0.6667, text_font_size='18px', text_baseline='middle', text_align='center', source=source)
rhours = Slider(title = "Run Hours", start = 0, end = 150, value = 30, step = 1)
month = Slider(title = "Month", start = 1, end = 12, value = 1, step = 1)
callback = CustomJS(args=dict(source=source, rhours=rhours, month=month), code="""
const R = rhours.value | 0
const M = month.value | 0
// Utility functions to perform dataframe-like operations:
const select = (source, field) => source.map(row => row[field]);
const max = (source, field) => Math.max(...select(source, field));
function getFactorForMaxRunHours(source, month, rhours) {
source = source.filter(row => row.Month === M && row.RunHours row.RunHours === maxRunHours)?.Factor;
}
const Factor = getFactorForMaxRunHours(source, month, rhours)
source.data = {Factor:[Factor]}
""")
rhours.js_on_change('value', callback)
month.js_on_change('value', callback)
show(row([p, column([rhours, month])]))
Подробнее здесь: https://stackoverflow.com/questions/790 ... ple-rework