2014-01-11 68 views
8

我想用ggplot2創建下一個直方圖密度圖。在 「正常」 的方式(基礎包)是很容易的:在ggplot2中創建密度直方圖?

set.seed(46) 
vector <- rnorm(500) 
breaks <- quantile(vector,seq(0,1,by=0.1)) 
labels = 1:(length(breaks)-1) 
den = density(vector) 
hist(df$vector, 
    breaks=breaks, 
    col=rainbow(length(breaks)), 
    probability=TRUE) 
lines(den) 

enter image description here

隨着ggplot我迄今所達成的:

seg <- cut(vector,breaks, 
      labels=labels, 
      include.lowest = TRUE, right = TRUE) 
df = data.frame(vector=vector,seg=seg) 

ggplot(df) + 
    geom_histogram(breaks=breaks, 
        aes(x=vector, 
         y=..density.., 
         fill=seg)) + 
    geom_density(aes(x=vector, 
         y=..density..)) 

但 「y」 的規模有錯誤的維度。我已經注意到下一次運行會得到正確的「y」比例。

ggplot(df) + 
    geom_histogram(breaks=breaks, 
        aes(x=vector, 
        y=..density.., 
        fill=seg)) + 
    geom_density(aes(x=vector, 
         y=..density..)) 

我只是不明白它。 y=..density..在那裏,那應該是高度。那麼爲什麼地球上的規模在我嘗試填充時會被修改?

我確實需要顏色。我只想要一個直方圖,根據默認的ggplot填充顏色對每個塊的中斷和顏色進行定向設置。

+0

我編輯你的提交,以便代碼將適合在頁面上。您可能會對Google關於如何爲代碼提​​供最大可讀性和實用性的建議感興趣:請參閱http://google-styleguide.googlecode.com/svn/trunk/Rguide.xml –

回答

8

手動添加顏色到百分比欄。看看這是否適合你。

library(ggplot2) 

ggplot(df, aes(x=vector)) + 
    geom_histogram(breaks=breaks,aes(y=..density..),colour="black",fill=c("red","orange","yellow","lightgreen","green","darkgreen","blue","darkblue","purple","pink")) + 
    geom_density(aes(y=..density..)) + 
    scale_x_continuous(breaks=c(-3,-2,-1,0,1,2,3)) + 
    ylab("Density") + xlab("df$vector") + ggtitle("Histogram of df$vector") + 
    theme_bw() + theme(plot.title=element_text(size=20), 
         axis.title.y=element_text(size = 16, vjust=+0.2), 
         axis.title.x=element_text(size = 16, vjust=-0.2), 
         axis.text.y=element_text(size = 14), 
         axis.text.x=element_text(size = 14), 
         panel.grid.major = element_blank(), 
         panel.grid.minor = element_blank()) 

enter image description here

+1

謝謝,我一直在尋找替代解決方案,但我已經結束了與你的。 – Usobi

1

fill=seg導致分組。實際上,每個seg的值都會得到不同的直方圖。如果你不需要的顏色,你可以這樣做:

ggplot(df) + 
    geom_histogram(breaks=breaks,aes(x=vector,y=..density..), position="identity") + 
    geom_density(aes(x=vector,y=..density..)) 

enter image description here

如果您需要的顏色,這可能是最簡單的計算GGPLOT2外的密度值。

+0

,但高度仍然是錯誤的,對吧? – Usobi

+0

對不起,我不明白你的意見。 – Roland