我对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'属性集
我认为我做的事情很愚蠢。有人能指出我正确的方向吗?
答案 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()