在ggplot2中创建密度直方图?

Uso*_*obi 23 r colors histogram ggplot2 probability-density

我想创建下一个直方图密度图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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

到目前为止,我已经达到了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..))
Run Code Online (Sandbox Code Playgroud)

但是"y"尺度具有错误的尺寸.我注意到下一次运行得到了正确的"y".

 ggplot(df) + 
     geom_histogram(breaks=breaks,
                    aes(x=vector,
                    y=..density..,
                    fill=seg)) + 
     geom_density(aes(x=vector,
                      y=..density..))
Run Code Online (Sandbox Code Playgroud)

我只是不明白.y=..density..在那里,应该是高度.那么为什么我试图填充它时我的尺度会被修改?

我确实需要颜色.我只想要一个直方图,其中根据默认的ggplot填充颜色定向设置每个块的中断和颜色.

And*_*lva 24

我手动地为你的百分位数添加了颜色.看看这是否适合你.

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())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Rol*_*and 5

fill=seg结果分组。对于 的每个值,您实际上得到了不同的直方图seg。如果你不需要颜色,你可以使用这个:

ggplot(df) + 
  geom_histogram(breaks=breaks,aes(x=vector,y=..density..), position="identity") + 
  geom_density(aes(x=vector,y=..density..))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果您需要颜色,在 ggplot2 之外计算密度值可能是最简单的。