2016-04-20 17 views
1

Ich habe Daten mit einem 2-Level-Faktor, die ich gerne als Histogramm ggplot2 überlagern würde.Overlaying ggplot2 Histogramme mit verschiedenen binwidths

Meine Daten:

set.seed(1) 
df <- data.frame(y = c(rnorm(1000),rnorm(10)), group = c(rep("A",1000),rep("B",10))) 

mein Grundstück:

library(ggplot2) 
ggplot(df, aes(y, fill = group)) + geom_histogram(alpha = 0.5, position = "identity") 

Das Problem ist, dass die Anzahl der Punkte für die Gruppen A und B, da sie zusammen mit diesem Code ist sehr unterschiedlich darstellen, die verwendet die gleiche binbreite ist nicht ideal.

In der Tat wirft es eine Warnung:

stat_bin()` using `bins = 30`. Pick better value with `binwidth`. 

Gibt es eine Möglichkeit überlagert Histogramme mit unterschiedlichen binwidths zu zeichnen?

Antwort

1

Sie müssen mit der Dichte arbeiten, d. H. Die Fläche unter dem Histogramm wird auf 1 addiert. In der Basisgrafik würden Sie freq=FALSE in der hist-Funktion einstellen. Für ggplot2 können Sie tun:

ggplot(df, aes(y, fill = group)) + geom_histogram(aes(y=..density..)) 

oder

ggplot(df, aes(y, fill = group)) + geom_density() 
2

können Sie auch die Faktoren auszusondern und gelten unterschiedliche binwidth s:

library(dplyr) 
library(ggplot2) 

set.seed(1) 
df <- data.frame(y = c(rnorm(1000), rnorm(10)), 
       group = c(rep("A", 1000), rep("B", 10))) 

gg <- ggplot() 
gg <- gg + geom_histogram(data=filter(df, group=="A"), 
          aes(y, fill=group), 
          alpha=0.5) 
gg <- gg + geom_histogram(data=filter(df, group=="B"), 
          aes(y, fill=group), 
          binwidth=4, alpha=0.5) 
gg 

enter image description here

Verwandte Themen