R 如何用Y轴上的数字而不是密度重叠直方图和密度图

R 如何用Y轴上的数字而不是密度重叠直方图和密度图,r,ggplot2,histogram,scale,density-plot,R,Ggplot2,Histogram,Scale,Density Plot,我在ggplot2中创建了柱状图,我想将它与相同数据的密度线重叠。重要的是,我不想将直方图转换为密度值,但希望将N(数字)保持在y轴上。 有没有办法在不变换直方图的情况下重叠直方图和密度图,而是放大密度曲线 此数据的直方图: 相同数据的初始密度图: 所需覆盖,但Y轴上的密度不是计数: 是的,但是你必须选择正确的比例因子。由于您不提供任何数据,我将用内置的iris数据进行说明 H = hist(iris$Sepal.Width, main="") 由于高度是频率计数,高度之和应等于nrow

我在ggplot2中创建了柱状图,我想将它与相同数据的密度线重叠。重要的是,我不想将直方图转换为密度值,但希望将N(数字)保持在y轴上。 有没有办法在不变换直方图的情况下重叠直方图和密度图,而是放大密度曲线

此数据的直方图:

相同数据的初始密度图:

所需覆盖,但Y轴上的密度不是计数:


是的,但是你必须选择正确的比例因子。由于您不提供任何数据,我将用内置的iris数据进行说明

H = hist(iris$Sepal.Width, main="")

由于高度是频率计数,高度之和应等于nrow(iris)的点数。曲线(长方体)下的面积是高度乘以长方体宽度的总和,因此

  Area = nrow(iris) * (H$breaks[2] - H$breaks[1])
在本例中,它是150*0.2=30,但最好将其保留为公式

现在标准密度曲线下的面积是1,所以我们要使用的比例因子是
nrow(iris)*(H$breaks[2]-H$breaks[1])
,以使面积相同。在哪里应用比例因子

DENS = density(iris$Sepal.Width)
str(DENS)
List of 7
 $ x        : num [1:512] 1.63 1.64 1.64 1.65 1.65 ...
 $ y        : num [1:512] 0.000244 0.000283 0.000329 0.000379 0.000436 ...
 $ bw       : num 0.123
 $ n        : int 150
 $ call     : language density.default(x = iris$Sepal.Width)
 $ data.name: chr "iris$Sepal.Width"
 $ has.na   : logi FALSE
我们希望缩放密度图的y值,因此我们使用:

DENS$y = DENS$y * nrow(iris) * (H$breaks[2] - H$breaks[1])
并将该行添加到直方图中

lines(DENS)

通过调整密度计算的带宽,可以使这一点变得更好

H = hist(iris$Sepal.Width, main="")
DENS = density(iris$Sepal.Width, adjust=0.7)
DENS$y = DENS$y * nrow(iris) * (H$breaks[2] - H$breaks[1])
lines(DENS)

您需要使用由
stat\u density
创建的
.count..
参数,然后按箱子宽度缩放它

library(ggplot2)
set.seed(15)
df <- data.frame(x=rnorm(500, sd=10))
ggplot(df, aes(x=x)) + 
  geom_histogram(colour="black", fill="white", binwidth = 5 ) +
  geom_density(aes(y=..count..*5), alpha=.2, fill="#FF6666") 
库(ggplot2)
种子(15)

df会提出一个人们可以帮助解决的R问题。现在我们既没有代码也没有数据,所以除了猜测你在做什么之外很难做更多。非常感谢!特别是用于解释密度函数结果的结构!谢谢!我能问一下为什么我们要对宽度进行标准化吗?还有“伯爵…”的结构到底从哪里来?这是ggplot+geom_hist函数的输出,对吗?你如何使用这些“.”双点符号?很抱歉这些基本的问题,再次感谢你的回答-这正是我想要的<代码>计数..
stat_density
创建,这是
geom_density
的默认值;您可以像使用任何其他变量一样使用它。我不知道幕后到底发生了什么,但请参阅
stat\u density
的文档以了解它创建了什么。您可以按binwidth进行缩放,因为“…count``是x轴上的每单位计数,但直方图是每binwidth计数。如果这回答了您的问题,请单击复选标记让其他人知道。谢谢