2014-01-11 69 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