使用dplyr为每个组应用ggplot函数,并为每个组设置标题

使用dplyr为每个组应用ggplot函数,并为每个组设置标题,r,split,ggplot2,dplyr,R,Split,Ggplot2,Dplyr,我想在数据框中为每组创建一个单独的绘图,并在标题中包含该组 有了iris数据集,我可以在base R和ggplot中实现这一点 plots1 <- lapply(split(iris, iris$Species), function(x) ggplot(x, aes(x=Petal.Width, y=Petal.Length)) + geom_point() + ggtitle(x$Species[1])) 问题是,我似乎无法用非常简单的方式设置

我想在数据框中为每组创建一个单独的绘图,并在标题中包含该组

有了iris数据集,我可以在base R和ggplot中实现这一点

plots1 <- lapply(split(iris, iris$Species), 
  function(x) 
    ggplot(x, aes(x=Petal.Width, y=Petal.Length)) +
      geom_point() +
      ggtitle(x$Species[1]))

问题是,我似乎无法用非常简单的方式设置ggtitle每个组的标题


谢谢

使用
$Species
将物种数据拉入
ggtitle

iris %>% group_by(Species) %>% do(plots=ggplot(data=.) +
         aes(x=Petal.Width, y=Petal.Length) + geom_point() + ggtitle(unique(.$Species)))

这是另一个使用行方式的选项:

plots2 = iris %>% 
    group_by(Species) %>% 
    do(plots = p %+% .) %>% 
    rowwise() %>%
    do(x=.$plots + ggtitle(.$Species))

dplyr 0.8.0
中,我们可以使用
group\u map

库(dplyr,warn.conflicts=FALSE,quietly=TRUE)
#>警告:le package'dplyr'aétécompileéavec la version R 3.5.2
图书馆(GG2)
绘图3%
组别(种类)%>%
组映射(~tible(plots=list(
ggplot(.)+aes(x=Petal.Width,y=Petal.Length)+geom_point()+ggtitle(.y[[1]]))
情节3
#>#tibble:3 x 2
#>#类群:种[3]
#>物种区
#>           
#>1刚毛
#>2花色
#>3弗吉尼亚州
plots3$plots[[2]]


由(v0.2.0)于2019-02-18创建。

我倾向于通过自定义函数解决此问题,在该函数中,我使用
species[1]
指定标题。但如果你的实际情节是这么简单,这肯定是可行的。IE——我的工作流程通常是
plot.cust%groupby(Species)%>%plot.cust(…)
非常简单的解决方案,我没有想到!谢谢@MatthewPlourd我想是的,但是它看起来比
$Species[1]
更清晰。你也可以像
一样使用dplyr(.Species)
实际上,仅仅使用ggtitle(.Species)似乎是可行的,但我不知道为什么,而且我还没有检查任何建议的速度。再次感谢!了解group_map很有意思,虽然我发现这不适用于dplyr 0.8.3,但plots3返回3个1x1 TIBLES。最后一行应该是plots3[[2]]$plots。如果有人想在管道中保存这些绘图,你认为这是可能的吗?还是最好在plots3[[n]]$plots中循环?干杯
ggtitle
中的
.y
是什么?我猜它包含了关于不同群体的信息?名称
y
从哪里来?我如何访问它?
.y
是一个TIBLE,每个分组变量只有一行和一列,请参阅文档。因此,这里我采用第一列也是唯一一列的内容,即名称。
iris %>% group_by(Species) %>% do(plots=ggplot(data=.) +
         aes(x=Petal.Width, y=Petal.Length) + geom_point() + ggtitle(unique(.$Species)))
plots2 = iris %>% 
    group_by(Species) %>% 
    do(plots = p %+% .) %>% 
    rowwise() %>%
    do(x=.$plots + ggtitle(.$Species))