2015-03-13 52 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)) 
相關問題