I’m using the range slider to dynamically display points on a map. Currently I’m using a python function and the on_change method. Here is the relevant code:
distance_slider = RangeSlider(start=0, end=10000, range=(0, 10000), step=1, title=“Distance to Facility”, callback_policy=‘mouseup’)
def distance_callback (attr, old, new):
depositors = all_data[facility_menu.value][‘depositors’]
if fraud_menu.value == ‘Only Fraudulent’:
xs = [x for x, is_fraud, distance in zip(depositors[‘xs’], depositors[‘fraud’], depositors[‘distance’]) if is_fraud==1 and new[0] <= distance <= new[1]]
ys = [y for y, is_fraud, distance in zip(depositors[‘ys’], depositors[‘fraud’], depositors[‘distance’]) if is_fraud==1 and new[0] <= distance <= new[1]]
line_xs = [x for x, is_fraud, distance in zip(depositors[‘line_xs’], depositors[‘fraud’], depositors[‘distance’]) if is_fraud==1 and new[0] <= distance <= new[1]]
line_ys = [y for y, is_fraud, distance in zip(depositors[‘line_ys’], depositors[‘fraud’], depositors[‘distance’]) if is_fraud==1 and new[0] <= distance <= new[1]]
colors = [depositors[‘colors’][0]]*len(xs)
else:
xs = [x for x, distance in zip(depositors[‘xs’], depositors[‘distance’]) if new[0] <= distance <= new[1]]
ys = [y for y, distance in zip(depositors[‘ys’], depositors[‘distance’]) if new[0] <= distance <= new[1]]
line_xs = [x for x, distance in zip(depositors[‘line_xs’], depositors[‘distance’]) if new[0] <= distance <= new[1]]
line_ys = [y for y, distance in zip(depositors[‘line_ys’], depositors[‘distance’]) if new[0] <= distance <= new[1]]
colors = [depositors[‘colors’][0]]*len(xs)
depositors_source.data = dict(
x=xs,
y=ys,
color=colors
)
depositors_lines_source.data = dict(
x=line_xs,
y=line_ys,
color=colors
)
distance_slider.on_change(‘range’, distance_callback)
``
The code works however it updates as I’m sliding and not only during “mouseup.” I think this is due to the callback policy being applied to javascript callbacks. Is this correct? Also how could I get this behavior using the python function.