如何在带fill变量的ggplot下方添加描述性统计表?
为分组条形图添加对应汇总统计表
需求说明
基于ToothGrowth数据集绘制分组条形图,并在图表下方为每个分组(OJ/VC各剂量组)添加包含**最小值、第一分位数、中位数、第三分位数、最大值、样本量(N)、均值、标准差(sd)、标准误(se)**的汇总统计表,样式参考ggsummarystats的简洁风格。
完整实现代码
# 加载所需包 library(plyr) library(ggplot2) library(ggpubr) # 查看数据集前几行 head(ToothGrowth) # 将dose转换为因子类型 ToothGrowth$dose <- as.factor(ToothGrowth$dose) # 计算分组统计量 toothgrowth_summaries <- ddply(ToothGrowth, c("supp", "dose"), summarise, min = min(len), q1 = quantile(len, 0.25), median = median(len), q3 = quantile(len, 0.75), max = max(len), N = length(len), mean = mean(len), sd = sd(len), se = sd/sqrt(N) ) # 绘制分组条形图 p <- ggplot(toothgrowth_summaries, aes(x = dose, y = mean, fill = supp)) + geom_bar(stat = "identity", color = "black", position = position_dodge()) + geom_errorbar(aes(ymin = mean-se, ymax = mean+se), width=.2, position=position_dodge(.9)) + labs(title = "牙齿长度随剂量与补充剂的变化", x = "剂量(mg)", y = "平均牙齿长度", fill = "补充剂") + theme_minimal() # 整理统计量表列名,适配中文展示 table_data <- toothgrowth_summaries colnames(table_data) <- c("补充剂", "剂量", "最小值", "第一分位数", "中位数", "第三分位数", "最大值", "样本量(N)", "均值", "标准差(sd)", "标准误(se)") # 生成仿ggsummarystats风格的可视化表格 table_plot <- ggtable(table_data, rows = NULL) + theme( table.background = element_rect(fill = "white", color = "black"), table.header.background = element_rect(fill = "#f0f0f0"), table.header.text = element_text(face = "bold"), table.body.text = element_text(size = 10) ) # 组合条形图与统计表,调整上下比例 ggarrange(p, table_plot, nrow = 2, heights = c(2, 1), align = "v")
关键说明
- 统计量计算:通过
ddply按supp(补充剂)和dose(剂量)分组,计算所需的所有统计指标; - 条形图绘制:在基础ggplot代码上添加了标题、坐标轴标签和简约主题,提升可读性;
- 统计表生成:使用
ggpubr::ggtable将统计数据转换为可视化表格,通过主题设置匹配ggsummarystats的简洁风格; - 图形组合:用
ggarrange将条形图和统计表垂直排列,调整高度比例让图表更协调。
内容的提问来源于stack exchange,提问作者Jacob White
相关产品推荐
相关产品推荐

