散景:绘制多个图时的跨度

时间:2018-04-27 15:13:35

标签: python graph bokeh

我对Bokeh相当新,所以仍然可能会遗漏一些东西,但是如果我在循环中生成绘图,那么当我尝试在多个绘图上使用Span时,我会遇到问题。这是我正在尝试的:

titleString = 'Test Plot'
plotVals = [1, 2]
upperLimit = Span(location=6, dimension='width', line_color='red', line_dash='dashed', line_width=1)
lowerLimit = Span(location=-6, dimension='width', line_color='red', line_dash='dashed', line_width=1)
xVals = [0,1,2,3,4]
yVals = [2,4,3,4,2]
for t in enumerate(plotVals):
    print(t[1])
    imgTitle = 'Span Test ' + str(t[0])
    p = figure(title=imgTitle, plot_width=800, plot_height=450, y_range=(-8, 8), x_range=(-4,8))
    p.add_layout(upperLimit)
    p.add_layout(lowerLimit)
    p.circle(xVals,yVals, size=5)            
    show(p)
    reset_output()

第一张图按预期显示,但第二张图失败,显示以下消息:

  

ValueError:要添加的对象已经设置了'plot'属性集

我认为我做的事情很愚蠢。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

渲染器(包括Span等注释)可能无法在多个绘图之间共享。您需要为每个绘图创建新的跨度。

如果您明确尝试重用循环外定义的span配置,则可能会重写类似于:

titleString = 'Test Plot'
plotVals = [1, 2]

upper_kw = dict(location=6, dimension='width', line_color='red', line_dash='dashed', line_width=1)
lower_kw = dict(location=-6, dimension='width', line_color='red', line_dash='dashed', line_width=1)

xVals = [0,1,2,3,4]
yVals = [2,4,3,4,2]
for t in enumerate(plotVals):
    imgTitle = 'Span Test ' + str(t[0])
    p = figure(title=imgTitle, plot_width=800, plot_height=450, y_range=(-8, 8), x_range=(-4,8))

    p.add_layout(Span(**upper_kw))
    p.add_layout(Span(**lower_kw))

    p.circle(xVals, yVals, size=5)            
    show(p)
    reset_output()