我尝试使用ggplot2和purrr :: map()结合split()来循环许多绘图。我可以让这些情节正常工作,但我在提取分割值时无法用作标题。
令牌数据:
y=tibble(SplitVar=rep(c('A','B','C'),3),
Variable=c(rep('A',3),rep('B',3),rep('C',3)),
Value=runif(n=9))
我想要的图是由:
生成的y%>%split(y$SplitVar)%>%map(~ggplot(.,aes(Variable,Value,fill=Variable))+
geom_col(position='dodge'))
但我无法弄清楚如何获得SplitVar值' A'' B'' C'提取用作:
...+labs(title=...)
我可以直接提取值:
y%>%split(y$SplitVar)%>%names(.)
[1] "A" "B" "C"
但是当我尝试将其添加到图中时,
y%>%split(y$SplitVar)%>%map(~ggplot(.,aes(Variable,Value,fill=Variable))+
geom_col(position='dodge')+
labs(title=names(.)))
修改 我的A数据值实际上嵌套了第二个拆分值。我现在可以得到我需要的标签,但是我无法获得一个map函数来进入第一个值的嵌套循环并生成绘图,然后退出其他因素。修改后的输入如下:
y=tibble(Split1=c(rep('A',9),rep('B',3),rep('C',3)),
Split2=c(rep(c('A','B','C'),3),rep('D',3),rep('E',3)),
Var=c(rep('A',3),rep('B',3),rep('C',3),rep(c('A','B','C'),2)),
Value=runif(15)
)
我可以将tibble分割成适当的嵌套列表:
y%>%split(y$Split1)%>%map(~if(.$Split1=='A') split(.,.$Split2,drop=TRUE) else .)
但我能想出的最好的方法是分别定义两个程序:
y[[1]]%>%map(~ggplot(.,aes(Variable,Value,fill=Variable))+
geom_col(position='dodge')+
labs(title=unique(.x$Split2)))
y2=y%>%filter(Split1!='A')
y2%>%split(y2$Split1,drop=TRUE)%>%map(~ggplot...)
答案 0 :(得分:2)
这对我有用:
y %>%
split(y$SplitVar) %>%
map(~ggplot(.,aes(Variable,Value,fill=Variable))+
geom_col(position='dodge')+
labs(title=unique(.x$SplitVar)))
答案 1 :(得分:0)
也许会这样做:
y %>%
split(y$SplitVar) %>%
map2(
names(.),
~ ggplot(.x,aes(Variable,Value,fill=Variable))+
geom_col(position='dodge')+
labs(title= .y))