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
可以做到这一点。我读了你评论的这一部分,但有同样的想法。(:因为我已经签出了,所以我把它作为编辑添加到我的答案中。