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