RangeSlider не работает с точечной диаграммой

#bokeh

#боке

Вопрос:

Возможно ли заставить ползунок диапазона работать с точечной диаграммой? Ползунок работает, если я меняю разброс на линейный график, но у меня это не работает, так как я не могу использовать инструмент выбора окна для линейных графиков. Приведенный ниже фрагмент упрощен, чтобы продемонстрировать проблему. Я подозреваю, что проблема во встроенном JavaScript, но я могу ошибаться, поскольку он отлично работает с линейным графиком. Спасибо.

 from bokeh.io import show
from bokeh.models import CustomJS, RangeSlider, Column, Row
from bokeh.plotting import figure

x = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
y = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
scatter_plot = figure(width=250, plot_height=600)
scatter_plot.scatter(x, y)
callback = CustomJS(args=dict(y_range=scatter_plot.y_range), code="""
var start = cb_obj.value
y_range.start = start[0]
y_range.end = start[1]
""")
depth_slider = RangeSlider(width=250, show_value=False, start=-20, end=120, value=(20, 80), step=20, 
title="Y Scale")
depth_slider.js_on_change('value', callback)
layout = Column(Row(depth_slider), scatter_plot, )
show(layout)
  

Ответ №1:

Похоже, что происходит какое-то состояние гонки или несоответствие между тем, как работают версии Bokeh на Python и JS. По умолчанию все диапазоны являются экземплярами DataRange1d класса, которые пересчитываются start и end при необходимости. В этом случае он по какой-то причине пересчитывает значения после того, как вы задали их вручную.

Чтобы исправить это, укажите диапазон вручную с самого начала:

 scatter_plot = figure(..., y_range=(20, 80))