2013-09-21 69 views
5

我有一個看起來像這樣的例子在facet_wrap documentation數據:在ggplot2中輕鬆添加'(全部)'facet到facet_wrap?

http://docs.ggplot2.org/current/facet_wrap-29.png

我想,以填補整體視圖中的最後面,使用所有的數據。

有沒有簡單的方法來添加一個'總'方面facet_wrap?向facet_grid添加利潤率很容易,但該選項在facet_wrap中不存在。

注:使用facet_grid如果你想有一個象限如上面的情節,這就需要ncolnrow參數從facet_wrap是不是一種選擇。

回答

7
library(ggplot2) 

p <- qplot(displ, hwy, data = transform(mpg, cyl = as.character(cyl))) 
cyl6 <- subset(mpg, cyl == 6) 
p + geom_point(data = transform(cyl6, cyl = "7"), colour = "red") + 
    geom_point(data = transform(mpg, cyl = "all"), colour = "blue") + 
    facet_wrap(~ cyl) 

enter image description here

+0

完美!你是否也知道把全部變成另一個字符串有多難?非常感謝您的幫助。 –

+0

不難。只需在代碼中進行更改即可。 – Roland

+0

完美,按預期工作。不知道'轉換'技巧(同時也學習'mutate')。再次感謝你的幫助。 –

-2

你可以嘗試以下爲在facet_wrap 「頁邊距」 選項:

library(ggplot2) 

p <- qplot(displ, hwy, data = transform(mpg, cyl = as.character(cyl))) 
cyl6 <- subset(mpg, cyl == 6) 
p + geom_point(data = transform(cyl6, cyl = "7"), colour = "red") + 
    facet_wrap(~ cyl, margins=TRUE) 
3

我喜歡稍微替代方法。基本上,數據在創建繪圖之前被複制,爲所有數據添加一組新的數據。我寫了以下CreateAllFacet函數來簡化這個過程。它會返回帶有重複數據的新數據框和附加列facet

library(ggplot2) 

#' Duplicates data to create additional facet 
#' @param df a dataframe 
#' @param col the name of facet column 
#' 
CreateAllFacet <- function(df, col){ 
    df$facet <- df[[col]] 
    temp <- df 
    temp$facet <- "all" 
    merged <-rbind(temp, df) 

    # ensure the facet value is a factor 
    merged[[col]] <- as.factor(merged[[col]]) 

    return(merged) 
} 

添加新的列facet到原始數據的好處在於,它仍然允許可變cylinder要使用在美學內積來着色點:

df <- CreateAllFacet(mpg, "cyl") 

ggplot(data=df, aes(x=displ,y=hwy)) + 
    geom_point(aes(color=cyl)) + 
    facet_wrap(~ facet) + 
    theme(legend.position = "none") 

enter image description here