我想在直方图和各种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的诀窍是什么? 而且我观察到直方图似乎绘制了密度(在y轴上),而不是观察次数....我怎么能改变这个?
非常感谢!
答案 0 :(得分: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
给出的表达式按箱的宽度和总点数来缩放来解决这个问题:
out <- hist( rnorm(100, a, b) )
curve( dnorm(x,a,b)*100*diff(out$breaks[1:2]), add=TRUE )
虽然个人在y轴上没有标记标签的第一个选项(密度标度)对我来说更有意义。
答案 1 :(得分: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)