2016-07-05 82 views
0

我需要從一個數據框創建不同的直方圖。目前我使用這個循環以產生個體直方圖如何疊加先前用ggplot2創建的直方圖?

一個例子:

df<-matrix(NA,2000,5) 
df[,1]<-rnorm(2000,1,1) 
df[,2]<-rnorm(2000,2,1) 
df[,3]<-rnorm(2000,3,1) 
df[,4]<-rnorm(2000,4,1) 
df[,5]<-rnorm(2000,5,1) 
df<-data.frame(df) 

colnames(df) <- c("HB1", "HB2", "HB3","HB4", 'HB5') 

循環:

out<-list() 
for (i in 1:5){ x = df[,i] 
    out[[i]] <- ggplot(data.frame(x), aes(x)) + 
       geom_histogram(aes(y=..count../sum(..count..)), fill="red", 
        lwd=0.9, breaks=seq(0,5,0.1), col=("black"), alpha=I(.9)) + 
        labs(x=expression(d["HB"]), y="Frequency") 
    grid.arrange(out[[i]], ncol=1) 
} 

輸出都是這樣一個5個位數:

enter image description here

但現在我想做一個比較重疊的人他們中的一個。 這個數字是我真正想要的:提前

enter image description here

感謝

回答

1

重塑與tidyr::gather然後使用填充審美和 '位置= 「身份」'

df2 <- tidyr::gather(df) 
head(df2) 
# key  value 
#1 HB1 0.7493090 
#2 HB1 2.5475796 
#3 HB1 0.7756661 
#4 HB1 1.2562534 
#5 HB1 0.2757356 
#6 HB1 2.4831947 

ggplot(df2, aes(x = value, fill = key)) + 
    geom_histogram(aes(y=..count../sum(..count..)), breaks=seq(0,5,0.1), alpha=.6, position = "identity") + 
    labs(x=expression(d["HB"]), y="Frequency") 

數據要嘗試一個密度圖,而不是eipi10指出可能更容易理解,請使用

ggplot(df2, aes(x = value, fill = key)) + 
    geom_density(alpha=.6) + 
    labs(x=expression(d["HB"]), y="Frequency") 
+0

可能更容易理解爲密度圖,而不是直方圖。 – eipi10

+0

Yess !!。這樣可行!!。非常感謝你。 – Enrique