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

R语言ggplot分面折线图如何添加灰化对照组参考线

ggplot分面叠加对照组参考线实现

核心操作是在原有图层最底层新增独立的对照组参考线图层,该图层不继承全局的分组颜色、线型映射,固定为浅灰色,会在全部分面中绘制,不会遮挡上层各分面的专属分组图形。
注意你提供的示例数据用cbind生成时会强制把所有列转为字符型,会导致绘图计算错误,需要改用data.frame()构造数据框。


可直接运行的完整代码

library(ggplot2)
library(dplyr) # 用于筛选对照组数据,不想加载dplyr可以用基础函数subset筛选

# 1. 修正构造示例数据
sample <- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9)
group <- c("a","a","a","a","a","a","a","a","a","b","b","b","b","b","b","b","b",
           "b","c","c","c","c","c","c","c","c","c")
bins <-c("0-20","20-40","40-60","0-20","20-40","40-60","0-20","20-40","40-60","0-20","20-40","40-60", "0-20","20-40","40-60", "0-20","20-40","40-60", "0-20","20-40","40-60", "0-20","20-40","40-60", "0-20","20-40","40-60")
p_per_bin <- c(0,37.7192982,21.0526316,0,36.744186,23.7209302,0,36.2126246,31.5614618,
0,31.25,27.0833333,0,41.2280702,28.5087719,0,39.6078431,31.372549,0,43.7262357,
20.1520913,0,35.4716981,21.1320755,0,38.5350318, 29.9363057)
my_data <- data.frame(sample,group,bins,p_per_bin)

# 2. 绘图
graph <- ggplot(data=my_data, aes(x=bins, y=p_per_bin, group = group, 
                                  color = group, linetype = group, shape = group))+
  # 最底层:所有分面共用的对照组浅灰色参考线
  stat_summary(
    data = . %>% filter(group == "a"), # 仅提取对照组a的数据
    fun = "mean", geom = "line", lwd = rel(1),
    color = "lightgrey", # 固定参考线为浅灰色
    group = 1, # 取消全局分组映射的影响
    inherit.aes = FALSE, # 不继承全局的颜色、线型、形状映射
    aes(x = bins, y = p_per_bin) # 单独给参考层指定坐标映射
  ) +
  # 以下为原有代码,无需修改
  stat_summary(fun = "mean", geom = "line", lwd = rel(1))+
  stat_summary(fun = mean,
               geom = "pointrange",
               fun.max = function(x) mean(x) + sd(x) / sqrt(length(x)),
               fun.min = function(x) mean(x) - sd(x) / sqrt(length(x)))+
  stat_summary(fun = "mean", geom = "point", size = rel(2), fill = "white", stroke = rel(1.1))

graph + facet_wrap(~group) 

补充说明

  • 如果不想加载dplyr用管道符,可以提前用基础R函数筛选对照组数据:ctrl_data <- subset(my_data, group == "a"),把参考层的data参数替换为ctrl_data即可,效果完全一致。
  • 最终效果:对照组a的分面中浅灰参考线和本组折线完全重合,无视觉异常;b、c处理组分面中,底层显示浅灰色的对照组平均折线作为参考,上层保留本组的折线、误差棒、点元素,符合预期。
  • 如果需要参考线同步显示误差棒或点,参照参考线层的写法,单独添加对应的stat_summary层、固定颜色为浅灰色即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:01:15