2013-05-02 12 views
9

Moje pytania są podobne do Normalizing y-axis in histograms in R ggplot to proportion , ale chciałbym dodać trochę.Normalizowanie histogramów fasetowanych osobno w ggplot2

Generalnie mam 6 histogramów w szablonie 2 x 3 i chciałbym normalizować każdy z nich osobno. Postaram się zrobić przykładowe dane określone tutaj, aby dać wyobrażenie:

hvalues=c(3,1,3,2,2,5,1,1,12,1,4,3) 
season=c("fall","fall","fall","fall","winter","winter","winter","winter","summer","summer","summer","summer") 
year=c("year 1","year 1","year 2","year 2","year 1","year 1","year 2","year 2","year 1","year 1","year 2","year 2") 
group=c("fall year 1","fall year 1","fall year 2","fall year 2","winter year 1","winter year 1","winter year 2","winter year 2","summer year 1","summer year 1","summer year 2","summer year 2") 
all=data.frame(hvalues,season,year) 

Korzystanie

ggplot(all, aes(x=hvalues,group=group)) + 
geom_histogram(aes(y=..count../sum(..count..))) + 
facet_grid(season ~ year) 

daje proporcje wierzchnie (tj łącząc wszystkie aspekty). Chciałbym, aby każdy aspekt grupy był znormalizowany do 1. h wartości nie są liczbami całkowitymi w moich rzeczywistych danych - są liczbowe.

Jestem nowicjuszem używającym R i naprawdę doceniłbym jakąś pomoc. Z góry dziękuję!

+1

Spróbuj "y = ..density..". – joran

+1

'all' musi być ramką danych. Wypróbuj 'all <- as.data.frame (cbind (hvalues, season, year))'. – JT85

+1

@ JT85 Zgadzam się, ale proszę nie zachęcaj do używania 'as.data.frame (cbind (...))' zamiast 'data.frame (...)'. – joran

Odpowiedz

4

Rozwiązaniem jest:

ggplot(all, aes(x=hvalues)) + 
    facet_grid(season ~ year,drop=T) + 
    geom_histogram(aes(y=(..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..])) 

Ukradłem to z tego question

czuję Twoje pytanie może być duplikat tej jednej drodze.

Powiązane problemy