如何用knitr kable将gt_tbl表格并排显示?
解决gt表格在bookdown/HTML中并排显示的问题
方案1:用HTML Flexbox原生布局(推荐,适配HTML输出)
既然输出是HTML,直接利用HTML的Flexbox布局嵌入gt生成的HTML表格,无需转成图片,从根源避免对齐问题,同时保留gt表格的交互性和美观度。
代码示例:
library(gt) library(htmltools) # 生成3个示例gt表格 tbl1 <- mtcars[1:3, 1:4] |> gt() |> tab_header(title = "车辆数据") |> tab_options(table.width = px(350)) # 统一表格宽度 tbl2 <- iris[1:3, 1:4] |> gt() |> tab_header(title = "鸢尾花数据") |> tab_options(table.width = px(350)) tbl3 <- ToothGrowth[1:3, ] |> gt() |> tab_header(title = "牙齿生长数据") |> tab_options(table.width = px(350)) # 用Flexbox布局实现并排 tagList( div( style = "display: flex; gap: 25px; align-items: flex-start; flex-wrap: wrap;", tbl1, tbl2, tbl3 ) )
关键设置说明:
display: flex: 开启弹性布局,让子元素(表格)横向排列gap: 25px: 控制表格间的间距align-items: flex-start: 让表格顶部对齐,避免因内容高度不同导致的错位flex-wrap: wrap: 适配小屏幕,空间不足时自动换行tab_options(table.width = px(350)): 统一所有表格的宽度,保证布局整齐
方案2:修复图片转存后的对齐问题(适合需兼容非HTML场景)
如果必须将gt表格转为图片,解决cowplot对齐问题的核心是统一所有表格的尺寸,具体步骤:
library(gt) library(cowplot) # 生成表格并统一尺寸设置 tbl1 <- mtcars[1:3, 1:4] |> gt() |> tab_header(title = "车辆数据") |> tab_options( table.width = px(400), table.height = px(220) # 强制表格高度一致 ) # 保存为图片时使用统一的宽高 gtsave(tbl1, "tbl1.png", width = 4, height = 2.2, dpi = 150) # 重复上述步骤生成tbl2、tbl3并保存为图片 tbl2 <- iris[1:3, 1:4] |> gt() |> tab_header(title = "鸢尾花数据") |> tab_options(table.width = px(400), table.height = px(220)) gtsave(tbl2, "tbl2.png", width = 4, height = 2.2, dpi = 150) tbl3 <- ToothGrowth[1:3, ] |> gt() |> tab_header(title = "牙齿生长数据") |> tab_options(table.width = px(400), table.height = px(220)) gtsave(tbl3, "tbl3.png", width = 4, height = 2.2, dpi = 150) # 读取图片并强制水平对齐 p1 <- ggdraw() + draw_image("tbl1.png") p2 <- ggdraw() + draw_image("tbl2.png") p3 <- ggdraw() + draw_image("tbl3.png") plot_grid( p1, p2, p3, nrow = 1, align = "h", # 水平对齐 axis = "tb", # 以顶部和底部为基准对齐 rel_widths = c(1,1,1) # 保证三个图片宽度占比一致 )
关键修复点:
- 用
tab_options强制表格的宽高一致,避免生成的图片尺寸差异 - 保存图片时使用相同的
width、height参数 plot_grid中设置align = "h"和rel_widths = c(1,1,1),确保横向对齐均匀
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

