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

Generate inline Bokeh scatterplots in Jupyter using a for loop

我正在尝试在 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

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

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

我做错了什么?

如果这在以前有效,我会说这是无意的未定义行为。 show 函数一直牢记它是为了 替换 下一个输出单元格中的输出,所以 运行 它在一个单元格中多次出现从来就不是一个考虑的使用模式。无论如何,添加对 JupyterLab 的支持需要对笔记本显示机制进行各种更改,这可能是您看到差异的直接原因。但是,我会说当前的行为是正确的,并且应该期待未来的行为。

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

from bokeh.layouts import column
layout = column()

for x in foo:

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

show(layout)