ggplot2:在 facet_grid 内按组添加水平线

ggplot2: add horizontal line by group inside facet_grid

我想按组绘制带水平线的点图。 df 对象存储点,df.line 对象存储我想添加到点图中的线。横线不是点的mean/median值,是我想在这个图中展示的一些标准。

我尝试了 gome_hlinegeom_linegeom_errorbarstat_summary。但是 none 他们的工作如我所愿。

谁能教我怎么做?

library(ggplot2)
library(tidytext)
set.seed(42)
df=data.frame(site=c(rep("a",5),rep("b",5),rep("c",5)),
          sample=c(1:5,1:5,1:5),
          value=c(runif(5, min=0.54, max=0.56),runif(5, min=0.52, max=0.6),runif(5, 
          min=0.3, max=0.4)),
          condition=c(rep("c1",5),rep("c2",5),rep("c2",5)))
df.line=data.frame(site=c("a","b","c"),standard=c(0.55,0.4,0.53))
ggplot(df)+
geom_point(aes(x=tidytext::reorder_within(site,value,condition,fun=mean),
                       y=value))+
facet_grid(~condition,space="free_x",scales = "free_x")+
scale_x_reordered()

首先,将 dfdf.line 合并在一起。接下来,将主要的 aes() 调用移至 ggplot 以便稍后使用。然后使用 stat_summary:

library(dplyr)
merge(df,df.line) %>%
ggplot(aes(x=tidytext::reorder_within(site,value,condition,fun=mean),
                       y=value))+
geom_point()+
stat_summary(aes(y = standard, ymax = after_stat(y), ymin = after_stat(y)),
             fun = mean, geom = "errorbar", color = "red", width = 0.3) +
facet_grid(~condition,space="free_x",scales = "free_x")+
scale_x_reordered()