2013-05-02 16 views
9

Meine Fragen sind ähnlich wie Normalizing y-axis in histograms in R ggplot to proportion aber ich möchte es ein wenig hinzufügen.Normalisieren facettierten Histogramme separat in ggplot2

Im Allgemeinen habe ich 6 Histogramme in einem 2x3 Facetten-Design, und ich möchte sie jeden einzeln zu normalisieren. Ich werde versuchen, eine Beispieldaten hier gesetzt, um eine Idee zu geben:

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) 

Mit

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

die Proportionen ergibt insgesamt (das heißt alle Facetten kombiniert). Ich möchte, dass jede Gruppenfacette auf 1 normalisiert wird. Hvalues ​​sind keine Ganzzahlen in meinen tatsächlichen Daten - sie sind numerisch.

Ich bin ein Neuling mit R, und würde wirklich etwas Hilfe zu schätzen wissen. Danke im Voraus!

+1

Versuchen Sie 'y = .. density..'. – joran

+1

'all' muss ein Datenrahmen sein. Versuchen Sie 'all <- as.data.frame (cbind (hvalues, season, year))'. – JT85

+1

@ JT85 Ich stimme zu, aber bitte ermutigen Sie nicht die Verwendung von 'as.data.frame (cbind (...))' anstelle von 'data.frame (...)'. – joran

Antwort

4

Die Lösung lautet:

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

Ich habe dies aus dieser question

Ich fühle mich Ihre Frage nach der Art und Weise ein Duplikat, dass man sein könnte.