散景循环绘制多个图像

Blu*_*ngo 2 python plot bokeh

我想在散景中绘制多个图?例如,这段代码以非常低效的方式完成了我想要的事情。我想要同样的东西,但可能带有loop? 或任何我不知道的散景功能。

p = figure(...)

p1 = figure(...)

p2 = figure(...)

y = [[1,2,3,4,5,6],[7,8,9,10,11,12],[3,1,4,3,2,5]]
x = [[2,3,4,5,6,7],[8,9,10,11,12,13],[1,4,3,2,5,6]]


plots = []
p.line(x=np.arange(6), y=y[0], color='#CE1141', legend='Prediction')
p.line(x=np.arange(6,12), y=x[0], color='#006BB6', legend='Prediction')
plots.append(p)

p1.line(x=np.arange(6), y=y[1], color='#CE1141', legend='Prediction')
p1.line(x=np.arange(6,12), y=x[1], color='#006BB6', legend='Prediction')
plots.append(p1)

p2.line(x=np.arange(6), y=y[2], color='#CE1141', legend='Prediction')
p2.line(x=np.arange(6,12), y=x[2], color='#006BB6', legend='Prediction')
plots.append(p2)


show(column(*plots))
Run Code Online (Sandbox Code Playgroud)

基本上,我有两个二维数组,我想将它们绘制在一个图中。我在 a 中尝试过,for loop但它绘制了图中的所有内容并多次显示相同的图,我尝试了类似的操作:

for i in range(3):
    p.line(x=np.arange(6), y=y[i], color='#CE1141', legend='Prediction')
    p.line(x=np.arange(6,12), y=x[i], color='#006BB6', legend='Prediction')
p.show()
Run Code Online (Sandbox Code Playgroud)

我可以在这里看到问题,所有内容都绘制在 中p,所以最后我得到了一个所有内容都被绘制的图。

我还尝试创建一个数组并在其中附加绘图,如上面工作效率低下的示例所示,但它显示第一列的空白图,并最后绘制包含其中所有内容的单个图。

Ton*_*ony 6

您可以这样做,例如使用列表理解(Bokeh v1.3.0):

from bokeh.plotting import figure, show
from bokeh.layouts import gridplot
import numpy as np

plots = [figure() for i in range(3)]
glyphs = [plot.line(np.arange(10), np.random.random(10)) for plot in plots for i in range(2)]
show(gridplot(children = plots, ncols = 1, merge_tools = False))
Run Code Online (Sandbox Code Playgroud)

或者如果你真的需要一个for循环:

from bokeh.plotting import figure, show
from bokeh.layouts import column
import numpy as np

plots = []
for i in range(3):
    p = figure()
    glyphs = [p.line(np.arange(10), np.random.random(10)) for j in range(2)]
    plots.append(p)
show(column(*plots))
Run Code Online (Sandbox Code Playgroud)

关键是您show()只能将单个模型对象传递给函数,因此您需要将所有绘图打包到某个layout组件中gridplot,例如 ,columnrow。还好知道每个都show()隐式创建一个 Bokeh文档,您传递给show()函数的所有模型都附加到该文档。在 Bokeh for every 中,document每个模型只能附加一次。因此,例如,如果不show(column(*plots))显式创建新的document.