ggplot2和purrr:循环使用split()并引用索引值

时间:2017-07-14 16:10:23

标签: r ggplot2 purrr

我尝试使用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'))

Sample Output Plot

但我无法弄清楚如何获得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...)

2 个答案:

答案 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))