R 在镶嵌面时添加多个注释

R 在镶嵌面时添加多个注释,r,ggplot2,facet,R,Ggplot2,Facet,我无法将多个注释(使用向量)添加到具有面的绘图中 例如: library(tidyverse) # ggplot2_3.3.0 tibble(t = 1:100) %>% crossing(id = LETTERS[1:2]) %>% group_by(id) %>% mutate(y = cumsum(rnorm(n()))) %>% ggplot(aes(t, y)) + # perhaps add `group = id` if you d

我无法将多个注释(使用向量)添加到具有面的绘图中

例如:

library(tidyverse) # ggplot2_3.3.0

tibble(t = 1:100) %>% 
  crossing(id = LETTERS[1:2]) %>% 
  group_by(id) %>% 
  mutate(y = cumsum(rnorm(n()))) %>% 
  ggplot(aes(t, y)) + # perhaps add `group = id` if you don't facet by `id`
  facet_wrap(vars(id)) + # (1)
  annotate('rect', xmin = 20, xmax = 30, ymin = -Inf, ymax = Inf, fill = 'grey60') + # (2)
  annotate('rect', xmin = 30, xmax = 40, ymin = -Inf, ymax = Inf, fill = 'grey70') + # (2)
  annotate('rect', xmin = 40, xmax = 50, ymin = -Inf, ymax = Inf, fill = 'grey80') + # (2)
  annotate('rect', xmin = 50, xmax = 60, ymin = -Inf, ymax = Inf, fill = 'grey90') + # (2)
  # annotate('rect', ymin = -Inf, ymax = Inf,                # (3)
  #          xmin = seq(20, by=10, len=4),                   # (3)
  #          xmax = seq(30, by=10, len=4),                   # (3)
  #          fill = paste0('grey', seq(60, by=10, len=4))) + # (3)
  geom_line() +
  theme_light()
上面的代码生成所需的绘图(特别是,我希望所有方面都有相同的注释)。但是,
annotate
命令重复四次;此外,
annotate
的帮助页面上还显示“几何体的属性……作为向量传递”。 因此,尝试注释掉第(2)行和取消注释第(3)行是很自然的事情。 不幸的是,这会产生错误

错误:长度必须为1或与数据(8):填充相同

请注意,如果您另外注释掉了第(1)行(并可选地将
group=id
添加到美学中),则不会生成错误。

有关ggplot2这种行为的讨论,请参阅。由于问题已经解决,而且据我所知,您无法通过使用
注释
来实现这一点。但是,要实现您的目标,您可以简单地使用
geom\u rect
如下所示:

library(tidyverse)#ggplot2_3.3.0
df_注释%
交叉(id=字母[1:4])%>%
分组依据(id)%>%
突变(y=cumsum(rnorm(n())))%>%
ggplot()+
几何校正(aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax,fill=fill),数据=df_注释)+
几何线(aes(t,y))+
比例填充标识()+
面_包裹(变量(id))+
主题灯()

由(v0.3.0)于2020年5月28日创建

编辑使用
ggnewscale
可以有第二个或。。。填充比例:

library(tidyverse)#ggplot2_3.3.0
图书馆(ggnewscale)
df_注释%
分组依据(id)%>%
突变(y=cumsum(rnorm(n()))
ggplot()+
几何校正(aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax,fill=fill),数据=df_注释)+
比例填充标识()+
新的刻度填充()+
geom_面积(数据=df,aes(t,y,填充=id))+
面_包裹(变量(id))+
主题灯()


由(v0.3.0)于2020年5月29日创建,谢谢。事实上,我还有一个额外的要求(我没有在上面提到):我的几何图形实际上是
geom\u col
,它有自己的
fill
要求(有点多姿多彩!)。这就是我想使用
注释
——将两者分开的原因。然而,你链接到GitHub的问题是非常有帮助的,并且让我觉得这是不可能的(或者需要类似的东西),因此我会接受这个答案。谢谢。是的
ggnewscale
可以做到这一点。我读了你评论的这一部分,但有同样的想法。(:因为我已经签出了,所以我把它作为编辑添加到我的答案中。