如何移除多幅Bokeh图表中的Bokeh Logo?
如何移除多幅Bokeh图表的Logo
你遇到的问题核心在于**merge_tools=True的作用**:当使用gridplot并开启这个参数时,所有子图的工具栏会被合并成一个全局共享的工具栏,这时候你修改单个子图的toolbar.logo根本不会生效——因为最终页面显示的是gridplot生成的共享工具栏,而非各个子图自己的工具栏。
下面给你两种针对性的解决方案:
方案一:修改共享工具栏(推荐,适合需要合并工具栏的场景)
先把gridplot的结果赋值给一个变量,然后直接修改这个变量的toolbar.logo属性即可:
from bokeh.plotting import figure, show from bokeh.models.tools import PanTool, BoxZoomTool, WheelZoomTool, LassoSelectTool, BoxSelectTool, ResetTool, PanTool, TapTool, SaveTool from bokeh.layouts import gridplot tools = [PanTool(), BoxZoomTool(match_aspect=True), WheelZoomTool(), BoxSelectTool(), ResetTool(), TapTool(), SaveTool()] figures = [figure(plot_width=800, plot_height=800, tools=tools, output_backend="webgl", match_aspect=True) for i in range(2)] figures[0].line([1, 2, 3, 4], [1, 4, 3, 0]) figures[1].line([1, 2, 3, 4], [1, 4, 3, 0]) # 先创建gridplot对象 grid = gridplot([figures], merge_tools=True, sizing_mode='scale_height') # 修改共享工具栏的logo grid.toolbar.logo = None show(grid)
方案二:关闭工具栏合并(适合需要独立工具栏的场景)
如果你不需要共享工具栏,只需要把merge_tools设为False,然后循环给每个子图设置toolbar.logo=None就行:
from bokeh.plotting import figure, show from bokeh.models.tools import PanTool, BoxZoomTool, WheelZoomTool, LassoSelectTool, BoxSelectTool, ResetTool, PanTool, TapTool, SaveTool from bokeh.layouts import gridplot tools = [PanTool(), BoxZoomTool(match_aspect=True), WheelZoomTool(), BoxSelectTool(), ResetTool(), TapTool(), SaveTool()] figures = [figure(plot_width=800, plot_height=800, tools=tools, output_backend="webgl", match_aspect=True) for i in range(2)] figures[0].line([1, 2, 3, 4], [1, 4, 3, 0]) figures[1].line([1, 2, 3, 4], [1, 4, 3, 0]) # 循环设置每个子图的logo为None for fig in figures: fig.toolbar.logo = None # 关闭工具栏合并 show(gridplot([figures], merge_tools=False, sizing_mode='scale_height'))
另外补充一点:如果想一次性移除所有图表的Logo(包括单图和多图),也可以通过设置Bokeh的全局配置来实现,但这种方式会影响所有图表,适合全局需求:
from bokeh.settings import settings settings.toolbar_logo = None
内容的提问来源于stack exchange,提问作者user8678484
相关产品推荐
相关产品推荐

