2013-09-21 14 views
5

Ho dati che assomiglia a questo esempio nel facet_wrap documentation:Aggiungi facilmente un facet "(tutto)" a facet_wrap in ggplot2?

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

vorrei riempire l'ultima sfaccettatura con la visione d'insieme, utilizzando tutti i dati.

C'è un modo semplice per aggiungere un facet "totale" con facet_wrap? È facile aggiungere margini a facet_grid, ma questa opzione non esiste in facet_wrap.

Nota: usando facet_grid non è un'opzione se si desidera un quadrante come nella trama di cui sopra, che richiede i ncol o nrow argomenti da facet_wrap.

risposta

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

Perfetto! Sapresti anche quanto è difficile cambiare 'tutto 'in un'altra stringa? Grazie mille per il tuo aiuto. –

+0

Non è affatto difficile. Basta cambiarlo nel codice. – Roland

+0

Perfetto, funziona come previsto. Non conoscevo i trucchi 'trasforma' (anche imparando a 'mutare' nella stessa occasione). Grazie ancora per il vostro aiuto. –

-2

si può provare l'opzione "margini" in facet_wrap come seguenti:

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

Io preferisco un approccio leggermente alternativo. In sostanza, i dati vengono duplicati prima di creare la trama, con una nuova serie di dati aggiunti per tutti i dati. Ho scritto la seguente funzione CreateAllFacet per semplificare il processo. Restituisce un nuovo dataframe con i dati duplicati e una colonna aggiuntiva 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) 
} 

Il vantaggio di aggiungere la nuova colonna facet per i dati originali è che permette ancora la variabile cylinder da utilizzare per colorare i punti nella trama entro l'estetica:

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

Problemi correlati