与JupyterHub中的Bokeh Server交互

时间:2018-07-03 19:18:00

标签: python bokeh jupyterhub

我有一个simple bokeh interaction notebook可以捕获用户绘制的坐标,并且可以在Jupyter中正常工作:

2018-07-03_6-52-18

import numpy as np

N = 500
x = np.linspace(0, 3, N)
y = np.linspace(0, 3, N)

xx, yy = np.meshgrid(x, y)
z = np.sin(xx) * np.cos(yy)

from bokeh import events
from bokeh.io import show, output_notebook
from bokeh.plotting import figure

output_notebook()

geom = {}
global geom

def print_event(attributes=[]):
    def python_callback(event):
        geom.update(event.__dict__['geometry'])
    return python_callback

def modify_doc(doc):
    p = figure(x_range=(0, 3), y_range=(0, 3), 
      tools='reset,box_select,lasso_select,poly_select', plot_height=300)
    p.image(image=[z], x=0, y=0, dw=3, dh=3, palette='Spectral11')
    p.on_event(events.SelectionGeometry, print_event(attributes=['geometry']))
    doc.add_root(p)

show(modify_doc)

print(geom)

但是在JupyterHub中,show(modify_doc)不会产生绘图,并且开发者控制台显示JS无法从此请求加载响应数据:

http://localhost:43474/autoload.js?bokeh-autoload-element=111c97fa-dbc8-437c-9770-471dc23fb13f&bokeh-absolute-url=http://localhost:43474&resources=none

自从我在pyp上通过

访问Dask仪表板以来

http://pangeo.esipfed.org/user/rsignell-usgs/proxy/8787

我虽然也许这样可以工作:

show(modify_doc, notebook_url='pangeo.esipfed.org/user/rsignell-usgs/proxy')

但是生成了此URL:

http://pangeo.esipfed.org/user/rsignell-usgs/proxy:34560/autoload.js?bokeh-autoload-element=870004ec-7366-4b38-b20f-2119e2b52327&bokeh-app-path=/user/rsignell-usgs/proxy:34560&bokeh-absolute-url=http://pangeo.esipfed.org/user/rsignell-usgs/proxy:34560&resources=none
给出了404错误的

我看到几个月前有一个Bokeh enhancement应该可以进行这种交互,并且我认为我应该能够将notebook_url指定为实现此功能的函数,但我不知道。

是否清楚我在做什么错,还是有人举了一个例子说明它是如何工作的?

1 个答案:

答案 0 :(得分:0)

Bokeh的文档提到了一些通过jupyterhub代理与bokeh服务器交互时需要做的设置:

https://bokeh.pydata.org/en/latest/docs/user_guide/notebook.html#jupyterhub

希望有帮助。