2015-03-13 47 views
13

我想在数据框中为每个组创建一个单独的图并在标题中包含该组。每组使用ggplot函数与dplyr并为每个组设置标题

随着虹膜数据集,我可以在基础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])) 

是否有一个相当于使用dplyr?

这是一个尝试使用facets而不是标题。

p <- ggplot(data=iris, aes(x=Petal.Width, y=Petal.Length)) + geom_point() 
plots2 = iris %>% group_by(Species) %>% do(plots = p %+% . + facet_wrap(~Species)) 

其中我使用%+%将p中的数据集替换为每个调用的子集。

Workaround with facets

或ggtitle(工作,但复杂的)

plots3 = iris %>% 
    group_by(Species) %>% 
    do(
    plots = ggplot(data=.) + 
     geom_point(aes(x=Petal.Width, y=Petal.Length)) + 
     ggtitle(. %>% select(Species) %>% mutate(Species=as.character(Species)) %>% head(1) %>% as.character())) 

Working example

的问题是,我似乎无法设置每个组的冠军ggtitle在一个非常简单的办法。

谢谢!

回答

28

使用.$Species的物种数据拉入ggtitle

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

我更倾向于解决通过自定义功能的这个问题,我使用'种[1]'指定标题。但如果你的实际情节是这么简单,这当然有效。 IE - 我的工作流程往往是'plot.cust < - function(...);虹膜%>%group_by(物种)%>%plot.cust(...)' – 2015-03-13 14:47:21

+0

非常简单的解决方案,没有发生在我身上!谢谢! – bytesinflight 2015-03-13 14:48:47

+1

@詹姆斯'独特'可能是昂贵的,不是吗? – 2015-03-13 15:03:00

0

这是使用rowwise另一种选择:

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