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

4
我想按组绘制一个带有水平线的点图。 数据点存储在df对象中,而df.line对象存储了我想要添加到点图中的线条。 这些水平线不是数据点的平均/中位数值,它们是我想在此图中显示的一些标准。
我尝试使用geom_hlinegeom_linegeom_errorbarstat_summary,但都无法满足我的需求。
请问有人可以教我如何实现吗?
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()

img


我曾经为了理解为什么我的误差条不按顺序排列而苦苦挣扎,但后来我意识到你的期望输出与你的数据不匹配。谢谢 =P - Ian Campbell
@IanCampbell 抱歉,我只是举了一个与我的数据不匹配的例子。 - Lijia Yu
1个回答

3

首先,将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()

enter image description here


太棒了!谢谢Ian,你帮我节省了整整一周的时间! - Lijia Yu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接