2009-10-07 16 views
8

Mam ładny wykres gęstości facet_wrap, który stworzyłem z ggplo2. Chciałbym, aby każdy panel miał etykiety osi X i Y zamiast tylko etykiet osi Y wzdłuż lewej strony i etykiet x na dole. Co mam teraz wygląda tak:Wyświetlanie wielu etykiet osi za pomocą ggplot2 z facet_wrap w R

library(ggplot2) 
myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T) 
myValues <- rnorm(300) 
df <- data.frame(myGroups, myValues) 


p <- ggplot(df) + 
    geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
    facet_wrap(~ myGroups) 
p 

Które zwraca:

alt text http://www.cerebralmastication.com/wp-content/uploads/2009/10/3stooges.png

Wydaje się, że to powinno być proste, ale mój Google Fu była zbyt słaba, aby znaleźć odpowiedź.

Odpowiedz

8

Krótka odpowiedź: Nie możesz tego zrobić. Może to mieć sens z 3 wykresami, ale co, jeśli masz dużą sieć złożoną z 32 wykresów? To byłoby głośno i źle. Filozofią GGplota jest robienie właściwych rzeczy przy minimalnej personalizacji, co oznacza, że ​​nie można dostosowywać rzeczy tak bardzo, jak innych pakietów.

Długa odpowiedź: Można go sfałszować, konstruując trzy oddzielne obiekty ggplot i łącząc je. Ale to nie jest bardzo ogólne rozwiązanie. Oto kod z książki Hadleya, który zakłada, że ​​utworzyłeś obiekty ggplot a, b i c. Umieszcza on w górnym rzędzie, z b i c w dolnym rzędzie.

grid.newpage() 
pushViewport(viewport(layout=grid.layout(2,2))) 
vplayout<-function(x,y) 
    viewport(layout.pos.row=x,layout.pos.col=y) 
print(a,vp=vplayout(1,1:2)) 
print(b,vp=vplayout(2,1)) 
print(c,vp=vplayout(2,2)) 
+0

Tak, był już „ty nie powinnaś zrobić” klimat z ggplot. Zamierzam spróbować zaimplementować przykład, który podałeś. Wydaje się to rozsądne. –

+2

Inną rzeczą, którą możesz wypróbować, jeśli potrzebujesz obrazów o jakości publikacji, jest zapisanie wykresu do formatu PDF lub SVG (jeśli nie masz w systemie Windows), użycie ggsave(), a następnie edycja wynikowego obrazu za pomocą czegoś takiego jak Inkscape . Możesz łatwo przesunąć dolny obraz i skopiować oś do góry ... – Harlan

10

Można to zrobić poprzez włączenie skalach = „wolny” opcję w swoim zaproszeniu facet_wrap:

myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T) 
myValues <- rnorm(300) 
df <- data.frame(myGroups, myValues) 


p <- ggplot(df) + 
    geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
    facet_wrap(~ myGroups, scales="free") 
p 
Powiązane problemy