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

如何为共享工具栏的Bokeh GridPlot设置默认激活工具?

解决GridPlot共享工具栏默认激活工具无法设置为None的问题

我之前也踩过这个坑!当使用Bokeh的GridPlot实现共享工具栏时,你在单个figure初始化时设置active_drag=None这类参数根本不起作用——因为共享工具栏会忽略单个图表的设置,沿用自己的默认激活配置,这就是为什么BoxZoomTool还是会被自动选中。

正确的做法是直接操作GridPlot的共享工具栏对象,修改它的激活工具属性:

具体步骤

  • 先正常创建所有需要放入GridPlot的figure实例,不用纠结单个图表的激活工具设置(就算设了也会被覆盖)
  • 创建GridPlot布局后,直接获取它的toolbar属性,然后把对应的激活工具设为None
  • 确保覆盖所有类型的激活工具(drag、inspect、scroll、tap等),避免遗漏

示例代码

from bokeh.plotting import figure, show
from bokeh.layouts import gridplot

# 创建两个共享轴的图表
p1 = figure(plot_width=300, plot_height=300)
p1.circle([1,2,3], [4,5,6])

p2 = figure(plot_width=300, plot_height=300, x_range=p1.x_range, y_range=p1.y_range)
p2.line([1,2,3], [6,5,4])

# 构建GridPlot布局
grid_layout = gridplot([[p1, p2]])

# 直接修改共享工具栏的激活设置
grid_layout.toolbar.active_drag = None
grid_layout.toolbar.active_inspect = None
grid_layout.toolbar.active_scroll = None
grid_layout.toolbar.active_tap = None

show(grid_layout)

原理说明

GridPlot会自动为所有子图表创建一个共享的Toolbar实例,这个工具栏的配置优先级高于单个figure的配置。所以不管你在figure初始化时怎么设置激活工具,最终都会被共享工具栏的默认值覆盖。直接操作这个Toolbar对象,才能真正改变默认激活的工具状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:07:15