You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bokeh绘图时Circle与Multiline图层顺序不生效问题咨询

解决Bokeh中Multiline图层被遮挡的问题

嘿,我懂你的困扰——明明按顺序先画了蓝色Circle再画Multiline,结果线条却被圆圈挡住了对吧?别担心,Bokeh里控制图层顺序有两个简单靠谱的方法:

方法1:手动调整渲染器顺序

Bokeh的figure对象里有个renderers列表,所有图形都是按这个列表的顺序渲染的最后一个元素会被画在最上层。如果你的Multiline没在预期的顶层,直接把它的渲染器移到列表末尾就行:

from bokeh.plotting import figure
from bokeh.models.sources import ColumnDataSource

# 假设你已经定义好两个数据源
circle_source = ColumnDataSource(data={'x': [1,2,3], 'y': [4,5,6]})
multiline_source = ColumnDataSource(data={'xs': [[1,2], [2,3]], 'ys': [[4,5], [5,6]]})

p = figure()
# 添加Circle并保存渲染器对象
circle_renderer = p.circle(x='x', y='y', source=circle_source, color='blue')
# 添加Multiline并保存渲染器对象
multiline_renderer = p.multi_line(xs='xs', ys='ys', source=multiline_source, color='black')

# 调整顺序:把Multiline渲染器移到列表最后,确保它在顶层
p.renderers.remove(multiline_renderer)
p.renderers.append(multiline_renderer)

方法2:利用预设层级(更简洁)

Bokeh给图形内置了几个渲染层级,优先级从低到高是:underlay < glyph(默认) < annotation < overlay。你可以直接给Circle设低层级,Multiline设高层级,一劳永逸:

p = figure()
# 把Circle固定在底层
p.circle(x='x', y='y', source=circle_source, color='blue', level='underlay')
# 把Multiline固定在顶层
p.multi_line(xs='xs', ys='ys', source=multiline_source, color='black', level='overlay')

这样不管你绘制顺序如何,Multiline都会始终显示在最上面,完全不用担心被遮挡~

内容的提问来源于stack exchange,提问作者ChesuCR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:34:52