-2

可能重复:
将密度曲线拟合到 R 中的直方图

我想在同一张图上绘制直方图和各种 pdf。我尝试了一个带有以下代码的pdf(采用我在网上找到的代码):

hist(data, freq = FALSE, col = "grey", breaks = "FD")
.x <- seq(0, 0.1, length.out=100)
curve(dnorm(.x, mean=a, sd=b), col = 2, add = TRUE)

它给了我一个错误。你能给我建议吗?对于多个pdf有什么诀窍?而且我观察到直方图似乎是绘制密度(在 yy 轴上)而不是观察次数......我该如何改变这个?

非常感谢!

4

2 回答 2

2

它绘制密度而不是频率,因为您指定了freq=FALSE. 抱怨它完全按照您的指示去做是不公平的。

curve函数需要一个涉及(不是 .x)的表达式,x并且它不需要您预先计算 x 值。你可能想要这样的东西:

a <- 5
b <- 2
hist( rnorm(100, a, b), freq=FALSE )
curve( dnorm(x,a,b), add=TRUE )

对于下一个问题,如果您指定freq=TRUE(或将其保留为默认值)并添加曲线,则曲线仅沿底部延伸(这是将直方图绘制为密度而不是频率的全部目的)。您可以通过缩放curve由 bin 的宽度和总点数给出的表达式来解决此问题:

out <- hist( rnorm(100, a, b) )
curve( dnorm(x,a,b)*100*diff(out$breaks[1:2]), add=TRUE )

虽然我个人认为 y 轴上没有刻度线标签的第一个选项(密度刻度)对我来说更有意义。

于 2012-08-22T20:15:02.460 回答
0
h<-hist(data, breaks="FD", col="red", xlab="xTitle", main="Normal pdf and     histogram")
xfit<-seq(min(data),max(data),length=100)
x.norm<-rnorm(n=100000, mean=a, sd=b)
yfit<-dnorm(xfit,mean=mean(x.norm),sd=sd(x.norm))
yfit <- yfit*diff(h$mids[1:2])*length(loose_All)
lines(xfit, yfit, col="blue", lwd=2)
于 2012-08-22T22:07:04.227 回答