2012-05-14 12 views
5

Bardzo lubię facet_grid dość często i często używam go z geom_histogram. Podobał mi się także argument margins=foo, który można zobaczyć we wszystkich dystrybucjach w porównaniu do zagregowanych grup. Problem polega na tym, że gdy podasz argument margin, rozciąga on wszystkie grupy, aby osiągnąć zwykle znacznie szerszy zakres skali dla marginesów, ponieważ masz teraz wszystkie dane. Oznacza to, że wszystkie zagregowane grupy skala y jest znacznie szersza i trudniej jest dostrzec różnice między grupami. Więc mówię sobie: self możesz to naprawić argumentem skal i pozwolić, żeby się różnił ". Problem z tym rozwiązaniem polega na tym, że trudno jest porównywać zagregowane grupy, ponieważ wszystkie mają inną skalę. mieć marginesy są wolne, ale wszystko inne ograniczone jakby chociaż łuski nie są wolne. Czy to możliwe?ggplot2 wolne marginesy ograniczają resztę

przedstawiam kod tutaj i fotki wykazać, co mam na myśli. Jeśli to nie jest jasne, proszę pytać.

#create some data 
set.seed(10) 
dat <- data.frame(var1=rpois(1000, 20), 
    var2=as.factor(sample(LETTERS[1:4], 1000, replace=T)), 
    var3=as.factor(sample(month.abb[1:5], 1000, replace=T))) 

ggplot(dat, aes(var1)) + 
geom_histogram() + 
facet_grid(var2~var3) 

Oto wykres z tym. Lubię go, że mogę łatwo porównać wszystkie zagregowane wyniki od ich wagi Y są takie same. Ale czy nie byłoby miło mieć marginesy lub dIS-zagregowane histogra ms także dla porównania.

enter image description here

ggplot(dat, aes(var1)) + 
geom_histogram() + 
facet_grid(var2~var3, margins='var2') 

Dobrze więc stawiamy margins argument i teraz możemy porównać, ale wszystkie zagregowane histogramy grupowe są rozciągnięte do 20, a to sprawia, że ​​trudno porównać je (patrz zdjęcie poniżej). Ok, ustawmy teraz scales, aby było wolne.ten przykład nie jest straszny, jak dane są dość równomiernie rozmieszczone int on metodę próbkowania użyłem ale w prawdziwym życiu niektóre komórki mają tylko kilka liczy i inni mają dużo i porównania są jeszcze gorsze

enter image description here

ggplot(dat, aes(var1)) + 
geom_histogram() + 
facet_grid(var2~var3, margins='var2', scales="free_y") 

Oto działka z wagami za darmo. Problem polega na tym, że są one rzeczywiście bezpłatne również dla zagregowanych wyników, a porównywanie ich jest problematyczne (jeden to 14, jeden 8, jeden 7).

enter image description here

Więc czy jest jakiś sposób, aby umożliwić tylko margins za darmo? Zasadniczo to, czego chcę, to wziąć pierwszą utworzoną postać i spliczyć marginesy z drugiej figury.

+0

Zgaduję, że nie, chociaż istnieje powiązane [żądanie funkcji] (https://github.com/hadley/ggplot2/issues/187), a wydaje mi się to łatwiejsze i rozsądniejsze do wdrożenia. – joran

+0

@joran Czy powinienem utworzyć żądanie funkcji na podstawie tego? Jeśli tak, to w jaki sposób? –

Odpowiedz

1

Czy to obejście zadziała w międzyczasie? Masz powtarzające się nagłówki, ale skala x i etykieta mogą zostać usunięte.

require(ggplot2) 
require(gridExtra) 
set.seed(10) 
dat <- data.frame(var1=rpois(1000, 20), 
        var2=as.factor(sample(LETTERS[1:4], 1000, replace=T)), 
        var3=as.factor(sample(month.abb[1:5], 1000, replace=T))) 
dat$var4 <- "All" 

windows(width=8, height=8) 

p1 <- ggplot(dat, aes(var1)) + 
    geom_histogram() + 
    facet_grid(var2~var3) + 


p2 <- ggplot(dat, aes(var1)) + 
    geom_histogram() + 
    facet_grid(~var3) 


grid.arrange(p1, p2, nrow=2, heights=c(4,1.5)) 

enter image description here

Prawdopodobnie już wiedzą, jak X-drop skalę i etykietę z pierwszej działce z scale_x_continuous('', breaks = NA).