我在R中有一个构面网格ggplot2图,我试图覆盖每个构面的水平线和功能区。我分别为水平线和功能区值制作了单独的数据框。但是,添加功能区时出现“找不到对象错误”的问题。
下面是一些可复制的代码。
# create DF
df1 = data.frame( x = rep(letters[1:4], 4),
y = rnorm(16, 0 , 1),
group = rep(1:4, each=4))
# horizonal line DF
hLines = data.frame(group = unique(df1$group) ,
y = aggregate(y ~ group, data=df1 , FUN=mean)[2] )
# CIs DF
hCIs = data.frame(group = unique(df1$group),
low = hLines$y - (2 * aggregate(y ~ group, data=df1 , FUN=sd)[2] ),
high = hLines$y + (2 * aggregate(y ~ group, data=df1 , FUN=sd)[2] ) )
ggplot(df1 , aes(x = x , y = y)) +
facet_grid(~group) +
geom_point(size=3) +
geom_hline(data=hLines, aes(yintercept = y))+
geom_ribbon(data=hCIs, aes(x=x, ymin=low, ymax=high))+
theme_bw()
Run Code Online (Sandbox Code Playgroud)
不包括geom_ribbon命令时,它可以工作。但是,当我尝试添加功能区时,我得到:
eval(expr,envir,enclos)中的错误:找不到对象“低”
非常感谢你的帮助。
编辑:我在hCI的列名称中犯了一个错误。但是,在指定时:
colnames(hCIs) = c("group", "low", "high")
Run Code Online (Sandbox Code Playgroud)
...我仍然收到一个错误:
错误:美学的长度必须为1或与数据(4)相同:x,ymin,ymax,y
您geom_ribbon在x指定新数据源时没有任何信息:hCIs没有x。
如果您合并两个数据框以获取x每个hCIs数据点的值,则可以这样做:
ggplot(df1 , aes(x = x , y = y)) +
facet_grid(~group) +
geom_point(size=3) +
geom_hline(data=hLines, aes(yintercept = y))+
geom_ribbon(data=merge(hCIs, df1), aes(ymin=low, ymax=high, group = group), alpha = 0.2)+
theme_bw()
Run Code Online (Sandbox Code Playgroud)