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
相关产品推荐
相关产品推荐

