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

Bokeh共享轴范围报错:IndexError: list index out of range排查

问题根源与解决方案

这个错误的原因很直观——你在创建列表的同一行里尝试引用p[0],但此时列表p还没有被完全初始化呢!

为什么会报错?

当你写p = [figure(...), figure(x_range=p[0].x_range, ...)]时,Python会先计算方括号内的所有元素,再把最终结果赋值给变量p。也就是说,在创建第二个figure的瞬间,p还没有被赋值,它只是一个正在构建的、不完整的列表,根本不存在p[0]这个元素,自然就抛出了IndexError。

正确的实现方式

你需要拆分创建步骤,确保第一个图表对象完全创建后,再用它的x_range来初始化第二个图表:

方式1:分步创建再组合

# 先创建第一个图表
fig1 = figure(title="Title", x_axis_label='Time (secs)', y_axis_label='Voltage (V)', tools=TOOLS, x_range=(0, 500), y_range=(0, 1000))
# 基于第一个图表的x_range创建第二个图表
fig2 = figure(title="Title_1", x_axis_label='Time (secs)', y_axis_label='Voltage (V)', tools=TOOLS, x_range=fig1.x_range, y_range=(0, 500))
# 最后把两个图表放进列表
p = [fig1, fig2]

方式2:先初始化空列表再逐个添加

p = []
# 添加第一个图表到列表
p.append(figure(title="Title", x_axis_label='Time (secs)', y_axis_label='Voltage (V)', tools=TOOLS, x_range=(0, 500), y_range=(0, 1000)))
# 此时p[0]已经存在,可直接引用它的x_range
p.append(figure(title="Title_1", x_axis_label='Time (secs)', y_axis_label='Voltage (V)', tools=TOOLS, x_range=p[0].x_range, y_range=(0, 500)))

这样设置后,两个图表的X轴范围就会完全同步,平移其中任意一个图表时,另一个也会跟着一起移动,实现你想要的联动效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:52:44