2013-05-02 21 views
9

Le mie domande sono simili a Normalizing y-axis in histograms in R ggplot to proportion ma mi piacerebbe aggiungervi un po '.Normalizzare gli istogrammi sfaccettati separatamente in ggplot2

In generale, ho 6 istogrammi in un design a sfaccettatura 2x3 e desidero normalizzarli separatamente. Cercherò di fare un campione di dati impostati qui per dare un'idea:

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) 

Utilizzando

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

dà le proporzioni complessiva (vale a dire che combina tutte le sfaccettature). Mi piacerebbe che ogni aspetto del gruppo fosse normalizzato a 1. Gli hvalues ​​non sono numeri interi nei miei dati reali: sono numerici.

Sono un principiante che usa R e apprezzerei davvero un po 'di aiuto. Grazie in anticipo!

+1

Provare 'y = ..densità..'. – joran

+1

'all' deve essere un dataframe. Prova 'all <- as.data.frame (cbind (hvalues, season, year))'. – JT85

+1

@ JT85 Sono d'accordo, ma per favore non incoraggiare l'uso di 'as.data.frame (cbind (...))' al posto di 'data.frame (...)'. – joran

risposta

4

La soluzione è:

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

mi ha donato questo da questo question

Sento la tua domanda potrebbe essere un duplicato di quella per la via.