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

ggplot中表格与条形图尺寸不匹配,如何对齐标题?

解决表格与条形图并排对齐及尺寸匹配问题

要实现表格列标题与图表标题对齐、每行内容与条形一一匹配,核心是统一两者的布局参数(行高、边距、总高度),以下是修改后的实现方案:

关键调整思路

  1. 提取条形图面板高度,分配给表格每行,确保行高与条形高度完全匹配
  2. 调整图表标题的边距,与表格列标题的垂直位置对齐
  3. 统一两者的总高度和宽度比例,消除空白或尺寸错位

修改后的代码

data(mtcars)
library(ggplot2)
library(dplyr)
library(grid)
library(gridExtra)
library(cowplot)
library(gtable)

data <- mtcars %>% 
  select(mpg, disp, cyl, qsec) %>% 
  tibble::rownames_to_column("Car Name") %>% 
  slice(1:7)

data$`Car Name` <- factor(data$`Car Name`, levels = data$`Car Name`)

# 创建表格并调整行高,匹配条形图的条形高度
t <- tableGrob(data %>% select(-mpg), 
               theme = ttheme_minimal(
                 core = list(fg_params = list(hjust = 0.5),
                             padding = unit(c(4, 4), "mm")),
                 colhead = list(fg_params = list(hjust = 0.5),
                                padding = unit(c(4, 4), "mm"))
               ), 
               rows = NULL)

# 计算条形图面板高度,分配为表格行高
p_temp <- ggplot(data, aes(x = mpg, y = `Car Name`)) + geom_bar(stat = "identity") + scale_y_discrete(limits=rev)
p_grob <- ggplotGrob(p_temp)
panel_height <- p_grob$heights[which(p_grob$layout$name == "panel")]
row_height <- panel_height / nrow(data)
t$heights[seq(2, nrow(t))] <- row_height

# 创建条形图并调整标题位置,与表格列标题对齐
p <- ggplot(data, aes(x = mpg, y = `Car Name`)) + 
  geom_bar(stat = "identity", fill = "white", color = "black", alpha = 0.3, size = .75) + 
  theme_classic() +
  theme(axis.text.y = element_blank(),
        axis.title.y = element_blank(),
        axis.title.x = element_blank(),
        plot.title = element_text(face = "bold", margin = margin(b = 10)),
        plot.margin = margin(t = 10, r = 10, b = 10, l = 0)) +
  ggtitle("No. of mpg") +
  scale_x_continuous(expand = expansion(mult = c(0, .1)), limits = c(0,30)) +
  scale_y_discrete(limits=rev)

# 统一表格与图表的总高度,并排展示
p_grob_final <- ggplotGrob(p)
t$heights[1] <- p_grob_final$heights[1] # 匹配标题行高度

grid.arrange(t, p_grob_final, nrow = 1, widths = c(2, 1)) # 按需调整宽度比例

核心说明

  • 行高匹配:通过ggplotGrob提取条形图的面板高度,平均分配给表格的每一行,确保表格每行和对应条形高度完全一致
  • 标题对齐:调整plot.title的下边距,同时统一表格和图表的顶部边距,让图表标题与表格列标题处于同一垂直位置
  • 尺寸优化:通过widths参数设置表格与图表的宽度比例,避免空白过多或内容拥挤;统一两者的标题行高度,消除上下错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:30:57