ggplot2和purrr:使用split()循环并引用索引值
我正在尝试使用ggplot2和purrr::map()以及split()来循环许多绘图。我可以让绘图正常工作,但提取分割值用作标题时遇到问题 令牌数据:ggplot2和purrr:使用split()循环并引用索引值,r,ggplot2,purrr,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(
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)
)
我可以使用以下命令将TIBLE拆分为相应的嵌套列表:
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))
太好了,谢谢你的快速回复。我不熟悉.x和.y语法,所以我将进行一些阅读和实验!如果要在
map
语句中引用数据本身,请使用.x
。您还可以使用map2
,例如@Aurele used,在这种情况下,数据仍然是.x
和第二个变量,names(.)
由.y
引用。我在我的应用程序中发现了一个复杂问题:y$SplitVar[1]实际上在SplitVar2中有自己的级别,但这是唯一一个这样的变量。我已经得到了为“a”嵌套的列表的代码,但是我找不到一个干净的方法,只为“a”将map()单步放入嵌套列表,然后退一步,像往常一样绘制其余示例。我已经花了2个小时进行调试,一有机会我就会更新示例数据。