使用for循环在Jupyter中生成内联Bokeh散点图

时间:2017-10-20 08:07:26

标签: python jupyter-notebook bokeh

我试图在Jupyter笔记本中内联绘制三个散景散点图。我之前已经能够做到这一点,但在更新了Bokeh之后,我无法让它发挥作用。现在我需要做些什么吗?

from bokeh.plotting import figure, output_file, output_notebook, show
output_notebook()


x = dfList[0][1]['ValueA']

for i in range(0,3):

    #Define figure
    p = figure(plot_width=900, plot_height=600,     
          tools="pan,wheel_zoom,lasso_select,box_zoom,reset,save,undo")

    #Add four datasets to figure
    for t in range(4):
        y = dfList[t][1]['ValueB']
        plot_data = p.circle(x,y)

    #Display figure in notebook
    show(p)

使用上面的代码,只显示第一个图。我试过了

from bokeh.plotting import reset_output

并在每次迭代后在reset_output()之后添加show(p),这会产生三个图,但它们都是在单独的浏览器选项卡中输出的,这不是我想要的。

如果我还在每次迭代中添加output_notebook(),而不是仅仅在我的笔记本的第一个单元格中,那么我仍然只获得第一个图,其中两个迭代显示“Loading BokehJS ...”消息

我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果之前有效,我会说这是无意的未定义行为。 show函数始终考虑到替换下一个输出单元格中的输出,因此在一个单元格中多次运行它从来就不是考虑的使用模式。无论如何,添加对支持JupyterLab的支持需要对笔记本电脑显示设备进行各种更改,这可能是您看到差异的直接原因。但是,我会说目前的行为是正确的,未来应该是什么。

做这样的事情的正确方法是以某种布局收集图,然后显示布局:

from bokeh.layouts import column
layout = column()

for x in foo:

    p = figure()
    layout.children.append(p)

show(layout)