Update a Bokeh Span with an interact element in Jupyter notebook

假装没事ソ 提交于 2021-01-28 04:03:46

问题


I am trying to make a span in bokeh using jupyter widgets.

from ipywidgets import interact

import numpy as np
from scipy.stats import norm

from bokeh.sampledata.daylight import daylight_warsaw_2013
from bokeh.io import push_notebook, show, output_notebook
from bokeh.plotting import figure
from bokeh.models import Span
output_notebook()
p = figure()

x_axis = np.arange(-10, 10, 0.001)
# Mean = 0, SD = 2.
y_axis = norm.pdf(x_axis,0,2)

p.line(x_axis, y_axis, line_dash='solid', line_width=2)

cutoff = Span(location=1,
              dimension='height', line_color='green',
              line_dash='dashed', line_width=2)
p.add_layout(cutoff)

show(p, notebook_handle=True)

def update(new_cutoff_location):
    cutoff.location = new_cutoff_location
    push_notebook()
interact(update, new_cutoff_location = 1.0)

When I run this code I get ValueError: PATCH-DOC message requires at least one event at push_notebook(). I suspect this indicates that the update to cutoff.location isn't getting detected, so it it looks as if there are no changes to send. Passing the handle doesn't seem to make a difference. Looking at the sample code in this github issue, it looks like there used to be an set method on span elements, but there doesn't appear to be one on my span element cutoff. Maybe there is a different function I am supposed to call to register the change?

I'm on bokeh 0.12.11 with jupyter 1.0.0, jupyter-client 5.1.0, jupyter-console 5.2.0, jupyter-core 4.4.0


回答1:


This appears to be a regression in Bokeh 0.12.11. Your code works with version 0.12.10 so the immediate workaround is to downgrade. I've made GitHub issue here that you can follow. We will issue a new point release with a fix ASAP.

UPDATE: The issue is now fixed in recent versions of Bokeh



来源:https://stackoverflow.com/questions/47583601/update-a-bokeh-span-with-an-interact-element-in-jupyter-notebook

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!