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

ggplot与tablegrob并排绘制:如何调整位置减少空白避免表格截断?

解决地图与表格并排空白过多、表格被截断的问题

下面是几个不用缩小表格字体就能解决问题的方法:

1. 调整grid.arrange的布局参数

直接在grid.arrange里分配宽度比例,同时砍掉多余的边距和内部空白:

library(gridExtra)
library(grid)

# 按需求调整宽度占比,比如地图拿6成空间,表格拿4成
grid.arrange(MAP, TABLE, 
             widths = c(0.6, 0.4),
             padding = unit(0, "lines"),  # 去掉组件之间的空白
             left = unit(0, "lines"), right = unit(0, "lines"))  # 砍掉左右两侧的边距

# 导出时记得设置足够大的画布尺寸,避免表格被挤
png("map_table.png", width = 12, height = 8, units = "in", res = 300)
grid.arrange(MAP, TABLE, widths = c(0.6, 0.4), padding = unit(0, "lines"))
dev.off()

2. 换用patchwork包布局

patchwork对ggplot类对象的布局控制更灵活,能更精准地调整间距:

library(patchwork)

# 把tableGrob转成ggplot对象,去掉多余主题空白
table_plot <- ggplot() + 
  annotation_custom(TABLE, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) +
  theme_void()

# 组合地图和表格,设置宽度比例并取消组件间距
MAP + table_plot +
  plot_layout(widths = c(2, 1),  # 地图占2份,表格占1份,可按需修改
              plot_spacing = unit(0, "lines"))

3. 先优化tableGrob的内部空白

如果表格本身自带多余空白,先调整它的参数:

# 创建tableGrob时就减少内部边距,并且左对齐
TABLE <- tableGrob(your_data, 
                   rows = NULL,
                   padding = unit(c(2, 2), "mm"),  # 缩小单元格内边距
                   gp = gpar(fontsize = 12),  # 保持原有字体大小
                   x = unit(0, "npc"),  # 表格左对齐,避免左侧留白
                   hjust = 0)

# 再用grid.arrange组合
grid.arrange(MAP, TABLE, widths = c(0.6, 0.4), padding = unit(0, "lines"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:25:03