如何消除Bokeh布局中Column内DataTable间的垂直空白?
解决Bokeh DataTable布局中垂直空白过多的问题
我之前也碰到过一模一样的问题!其实这是因为Bokeh的DataTable默认会预留不少垂直空间来适配滚动、动态行高这类场景,再加上布局默认的间距,就会出现大量空白。咱们可以通过几个简单的属性调整来解决:
关键修改点
- 给DataTable指定固定高度:根据表格的行数手动设置
height,避免默认的超大预留空间 - 关闭不需要的行头:如果你的场景不需要行索引列,设置
row_headers=False能减少额外宽度和空白 - 缩小布局间距:调整
column的spacing参数,减小表格之间的垂直距离 - 自适应宽度:给DataTable设置
sizing_mode='stretch_width'让表格宽度适配容器,视觉上更紧凑
修改后的示例代码
%matplotlib notebook import os import locale import numpy as np import pandas as pd from bokeh.plotting import figure, show from bokeh.io import output_notebook from bokeh.resources import INLINE from bokeh.models import ColumnDataSource from bokeh.models.widgets import DataTable, TableColumn from bokeh.layouts import column output_notebook(resources=INLINE) l = [] for x in range(1,4): matriz = np.random.random((3,3)) source = ColumnDataSource(data = dict(A=matriz[:,0], B=matriz[:,1], C=matriz[:,2])) columns = [TableColumn(field='A',title='A'), TableColumn(field='B', title='B'), TableColumn(field='C', title='C')] # 核心修改:指定高度、关闭行头、自适应宽度 data_table = DataTable( source=source, columns=columns, height=130, # 3行数据+表头,这个高度刚好适配 row_headers=False, sizing_mode='stretch_width' ) l.append(data_table) # 调整布局间距,默认是20,这里设为5更紧凑 show(column(l, sizing_mode='fixed', spacing=5))
额外说明
如果你的表格行数不固定,可以根据数据源的长度动态计算height,比如:
row_count = len(source.data['A']) # 每行大概30px,表头40px,留一点余量 data_table.height = row_count * 30 + 50
这样调整后,表格之间的垂直空白就会大幅减少,布局会紧凑很多!
内容的提问来源于stack exchange,提问作者Marcus Vinicius Eiffle Duarte
相关产品推荐
相关产品推荐

