2013-09-21 11 views
5

Mam dane, który wygląda tak przykładowo w facet_wrap documentation:Łatwe dodanie aspektu "(all)" do facet_wrap w ggplot2?

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

chciałbym wypełnić ostatni aspekt z ogólnym widoku, wykorzystując wszystkie dane.

Czy istnieje prosty sposób dodania "całkowitego" aspektu z facet_wrap? Łatwo dodać marginesy do facet_grid, ale ta opcja nie istnieje w facet_wrap.

Uwaga: używanie facet_grid nie jest opcją, jeśli chcesz ćwiartkę jak na wykresie powyżej, co wymaga ncol lub nrow argumentów facet_wrap.

Odpowiedz

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

Idealny! Czy wiesz też, jak trudno jest zmienić "wszystko" na inny ciąg? Bardzo dziękuję za pomoc. –

+0

Nie jest wcale trudne. Po prostu zmień go w kodzie. – Roland

+0

Doskonały, działa zgodnie z oczekiwaniami. Nie znałem trików "transformacji" (uczę się również o "mutacji" w tym samym czasie). Jeszcze raz dziękuję za pomoc. –

-2

można spróbować "marginesy" opcję w facet_wrap jako poniższych:

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

Wolę nieco inne podejście. Zasadniczo dane są duplikowane przed utworzeniem wykresu, z nowym zestawem danych dodawanych dla wszystkich danych. Napisałem następującą funkcję CreateAllFacet, aby uprościć proces. Zwraca nową ramkę danych ze zduplikowanymi danymi i dodatkową kolumną 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) 
} 

Zaletą dodanie nowej kolumny facet do oryginalnych danych jest to, że nadal pozwala zmienna cylinder być stosowany do barwienia punktów na wykresie w estetyce:

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

Powiązane problemy