曲线图功能

时间:2019-08-02 10:36:42

标签: r rstudio

为什么红色曲线不与绿色curve()重叠?

我注意到,如果将操作保存在中间对象上,然后将这些对象传递给curve()函数,它将毫无问题地工作。我的兴趣是通过在curve()中进行操作来了解为什么它不起作用。我觉得很好奇。

set.seed(1L)
x <- rnorm(n = 1e3L, mean = 200, sd = 30)
hist(x, probability = TRUE, ylim = c(0, 0.015))
curve(dnorm(x = x, mean = 200, sd = 30), col = "black", lty = 1, lwd = 2, add = TRUE) # OK
curve(dnorm(x = x, mean = 199.6506, sd = 31.04748), col = "green", lty = 1, lwd = 2, add = TRUE) # OK
curve(dnorm(x = x, mean = mean(x), sd = sd(x)), col = "red", lty = 1, lwd = 2, add = TRUE) # ?

1 个答案:

答案 0 :(得分:0)

正在发生的是,最后一个图未使用

的值
set.seed(1L)
x <- rnorm(n = 1e3L, mean = 200, sd = 30)

mean(x)
#[1] 199.6506
sd(x)
#[1] 31.04748

用于绿色曲线。
从函数curve的文档中(我的重点):

  

函数或表达式expr(对于曲线)或函数x(对于绘图)   在n个点上进行平均评估,该点在[从,到] 范围内平均分布。的   然后绘制以此方式确定的点。

     

如果from或to为NULL,则默认为对应的元素   xlim(如果不为NULL)。

     

当from / to和xlim均未指定两个x限制时,会发生什么情况   一个复杂的故事。对于plot()和曲线(add = FALSE),   默认值为(0,1)。对于curve(add = NA)和curve(add = TRUE)   默认值取自上一个图的x限制。(此   与2.14.0之前的R版本不同。)

以下功能显示了文档中的内容。它输出根据传递给函数的向量计算出的min(x)max(x)(x限制)以及mean(x)sd(x)的值。
下面的值length.out = 101是默认值n = 101

xx <- seq(100, 320, length.out = 101)
mean(xx)
#[1] 210
sd(xx)
#[1] 64.46038


f <- function(x) {
  cat("Inside the function:\n")
  cat("min(x):", min(x), "\tmax(x):", max(x), "\n")
  cat("mean(x):", mean(x), "sd(x):", sd(x), "\n")
  dnorm(x, mean = mean(x), sd = sd(x))
}

hist(x, probability = TRUE, ylim = c(0, 0.015))
curve(dnorm(x = x, mean = 200, sd = 30), col = "black", lty = 1, lwd = 2, add = TRUE) # OK
curve(dnorm(x = x, mean = 199.6506, sd = 31.04748), col = "green", lty = 1, lwd = 2, add = TRUE) # OK

cat("Outside the function:\nmin(x):", min(x), "\tmax(x):", max(x), "\n\n")
#Outside the function:
#min(x): 109.7585   max(x): 314.3083 

curve(f(x), col = "red", lty = 1, lwd = 2, add = TRUE) # ?
#Inside the function:
#min(x): 100    max(x): 320 
#mean(x): 210 sd(x): 64.46038 

这些值是预期值,已记录为行为。
最后是剧情。

enter image description here