R 在ggplot2中创建密度直方图?

R 在ggplot2中创建密度直方图?,r,ggplot2,colors,histogram,probability-density,R,Ggplot2,Colors,Histogram,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)),

我想用
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)
我就是不明白<代码>y=…密度..在那里,应该是高度。那么,当我尝试填充时,为什么我的刻度会被修改呢


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

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

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


如果您需要颜色,可能最容易在ggplot2之外计算密度值。

手动,我将颜色添加到百分比栏。看看这是否适合你

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())

关于解释y轴的混淆可能是由于绘制了密度而不是计数。因此,
y轴上的值
是总样本的比例,其中条的总和等于
1
或带有
ggpubr

library(ggpubr)
gghistogram(df, x = "vector", add = "mean", rug = TRUE, fill = "seg",
   palette = c("#00AFBB", "#E7B800", "#E5A800", "#00BFAB", "#01ADFA", 
   "#00FABA", "#00BEAF", "#01AEBF", "#00EABA", "#00EABB"), add_density = TRUE)

抱歉,我不理解您的评论。我编辑了您提交的内容,以便代码可以放在页面上。你可能会对谷歌关于如何编写代码以实现最大可读性和实用性的建议感兴趣:谢谢,我一直在寻找替代解决方案,但最终还是找到了你的。
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())
library(ggpubr)
gghistogram(df, x = "vector", add = "mean", rug = TRUE, fill = "seg",
   palette = c("#00AFBB", "#E7B800", "#E5A800", "#00BFAB", "#01ADFA", 
   "#00FABA", "#00BEAF", "#01AEBF", "#00EABA", "#00EABB"), add_density = TRUE)