【问题标题】:Adding a ribbon when faceting in ggplot2在 ggplot2 中分面时添加功能区
【发布时间】:2016-06-24 13:04:31
【问题描述】:

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

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

eval(expr, envir, enclos) 中的错误:找不到对象“低”

非常感谢您的帮助。

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

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

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

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

【问题讨论】:

  • hCIs,没有叫low的列。
  • 对不起,你是对的。在我的原始数据中,列名是相同的。但是,当我在此示例中手动将列名指定为 hCI 中的“组”、“低”和“高”时,我收到“错误:美学必须是长度 1 或与数据相同 (4):x , ymin, ymax, y"
  • 如果我将x=x 留在geom_ribbon 中,则会出现以下错误:Error in eval(expr, envir, enclos) : object 'x' not found 但如果我使用:geom_ribbon(data=hCIs, aes(group = 1, x = low,ymin=low, ymax=high), inherit.aes=FALSE) 则不会出现错误并显示绘图。

标签: r ggplot2


【解决方案1】:

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

【讨论】:

  • 我已经尝试过您的解决方案,我不再收到错误消息,但功能区没有出现。我正在使用 geom_bar 闪避
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多