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

Python 使用for循环在Jupyter中生成内联Bokeh散点图,python,jupyter-notebook,bokeh,Python,Jupyter Notebook,Bokeh,我正试图在一个Jupyter笔记本中内联绘制三个Bokeh散点图。我以前可以这样做,但在更新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(

我正试图在一个Jupyter笔记本中内联绘制三个Bokeh散点图。我以前可以这样做,但在更新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\u output()
show(p)
,这确实会生成三个绘图,但它们都是在单独的浏览器选项卡中输出的,这不是我想要的

如果我也在每次迭代中添加
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)

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

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

from bokeh.layouts import column
layout = column()

for x in foo:

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

show(layout)

非常感谢你的帮助。指定布局更有意义。非常感谢您的帮助。指定布局更有意义。