I have the following two functions for making a plot and updating it
def make_bar(df, x, y, label, color, color_mapper):
“”" Creates a bar chart in bokeh"""
p = figure(title=“Current Probability and Recommendations”,
x_range= df.data, webgl=True,
#plot_width=800,
plot_height=500)
labels = LabelSet(x=x, y=y, text=label, text_font_size = “9pt”, level=‘glyph’,
x_offset=-25, y_offset=0, source=source, render_mode=‘canvas’)
#p.segment(df.data, df.high, df.date, df.low, color=“black”)
p.vbar(x= x,
width=0.5,
bottom=0,
top=y,
#color=“darkgreen”,
fill_color={‘field’: color, ‘transform’: color_mapper},
source = df)
p.add_layout(labels)
p.yaxis[0].axis_label = ‘Probability of Success’
hline = Span(location=source.data[y][0], dimension=‘width’,
line_color=‘black’, line_width=2, line_dash = “dotted”)
p.add_layout(hline)
return p
def update_plot():
“”" Updates dashboard when Update Button
is pressed. “”"
f = mapFilters()
model_input_vector = models.make_vector(mapPredictors(f)) # vector formated for input
output = models.make_changes(model_input_vector, rf, lr) # get recommendations
src = ColumnDataSource(data=output) # convert to bokeh column source
source.data.update(src.data) # update primary source with new one
hline.location=src.data[‘Score’][0]
prob = rf.predict_proba(model_input_vector)[:,1] # probability of current model, if needed
updating div
recDiv.text = t.render(df=output)
I am trying to update the Span that I am using to create a dotted line. I used this code to add it, as shown above:
hline = Span(location=source.data[y][0], dimension=‘width’,
line_color=‘black’, line_width=2, line_dash = “dotted”)
p.add_layout(hline)
You can see in my update_plot function that I am trying to update the location, but it’s not working (not that I expected it to). Everything else in my plot updates when I update the source data using source.data.update(src.data).
How do you update the location of spans on data update?