首页 文章

在ggplot2中进行分面时添加功能区

提问于
浏览
3

我在R中有一个facet grid ggplot2图,我试图为每个facet覆盖一条水平线和一条带 . 我分别为水平线和功能区值制作了单独的数据帧 . 但是,添加功能区时,我遇到了“找不到对象错误”的问题 .

下面是一些可重现的代码 .

# 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()

当不包括geom_ribbon命令时,它可以工作 . 但是当我尝试添加功能区时,我得到:

eval中的错误(expr,envir,enclos):找不到对象'low'

非常感谢你的帮助 .

编辑:我在hCI的列名中犯了一个错误 . 但是,在指定时:

colnames(hCIs) = c("group", "low", "high")

......我仍然收到错误:

错误:美学必须是长度1或与数据(4)相同:x,ymin,ymax,y

1 回答

  • 4

    您的 geom_ribbon 没有关于 x 指定新数据源的信息: hCIs 没有 x .

    如果合并2个数据帧以获得每个 hCIs 数据点的 x 值,那么就可以使用:

    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()
    

    enter image description here

相关问题