'Bokeh: 绘制多图时的跨度'

2024-10-03 11:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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: object to be added already has 'plot' attribute set

我想我在做蠢事。有人能给我指出正确的方向吗?在


Tags: test绘图plotlinelocationredwidthcolor
1条回答
网友
1楼 · 发布于 2024-10-03 11:25:08

渲染器(包括注释,如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()

相关问题 更多 >