ggplot2 和 purrr:使用 split() 循环并引用索引值
ggplot2 and purrr: loop with split() and refer to index value
我正在尝试使用 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(.)))
我得到:
使用变量的名称,而不是 values.
编辑:
我的 A 数据值实际上嵌套了第二个拆分值。我现在可以得到我需要的标签,但我不能得到一个映射函数来进入嵌套循环以获得第一个值并生成图,然后退出其他因素。修改后的输入如下:
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...)
这对我有用:
y %>%
split(y$SplitVar) %>%
map(~ggplot(.,aes(Variable,Value,fill=Variable))+
geom_col(position='dodge')+
labs(title=unique(.x$SplitVar)))
也许这样可以:
y %>%
split(y$SplitVar) %>%
map2(
names(.),
~ ggplot(.x,aes(Variable,Value,fill=Variable))+
geom_col(position='dodge')+
labs(title= .y))
我正在尝试使用 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 数据值实际上嵌套了第二个拆分值。我现在可以得到我需要的标签,但我不能得到一个映射函数来进入嵌套循环以获得第一个值并生成图,然后退出其他因素。修改后的输入如下:
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...)
这对我有用:
y %>%
split(y$SplitVar) %>%
map(~ggplot(.,aes(Variable,Value,fill=Variable))+
geom_col(position='dodge')+
labs(title=unique(.x$SplitVar)))
也许这样可以:
y %>%
split(y$SplitVar) %>%
map2(
names(.),
~ ggplot(.x,aes(Variable,Value,fill=Variable))+
geom_col(position='dodge')+
labs(title= .y))