在 R 图形中的 "curve" 函数中使用用户定义的函数

Using user-defined functions within "curve" function in R graphics

我需要生成具有不同总面积(总和为 1)的正态分布密度图。使用以下函数,我可以指定 lambda - 它给出了相对区域:

sdnorm <-  function(x, mean=0, sd=1, lambda=1){lambda*dnorm(x, mean=mean, sd=sd)}

然后我想使用不同的参数绘制函数。使用 ggplot2,此代码有效:

require(ggplot2)
qplot(x, geom="blank") + stat_function(fun=sdnorm,args=list(mean=8,sd=2,lambda=0.7)) +
  stat_function(fun=sdnorm,args=list(mean=18,sd=4,lambda=0.30))

但我真的想在基本 R 图形中执行此操作,为此我认为我需要使用 "curve" 函数。但是,我正在努力让它发挥作用。

您可以在 base R 中执行以下操作

x <- seq(0, 50, 1)
plot(x, sdnorm(x, mean = 8, sd = 2, lambda = 0.7), type = 'l', ylab = 'y')
lines(x, sdnorm(x, mean = 18, sd = 4, lambda = 0.30))

编辑 我添加了 ylab = 'y' 并更新了图片以重新标记 y 轴。

这应该可以帮助您入门。

如果您查看 ? curve 的帮助文件,您会发现第一个参数可以是许多不同的东西:

The name of a function, or a call or an expression written as a function of x which will evaluate to an object of the same length as x.

这意味着您可以将第一个参数指定为函数名或表达式,因此您可以这样做:

curve(sdnorm)

获取带有默认参数的函数图。否则,要重新创建您想要执行的 ggplot2 表示:

curve(sdnorm(x, mean=8,sd=2,lambda=0.7), from = 0, to = 30)
curve(sdnorm(x, mean=18,sd=4,lambda=0.30), add = TRUE)

结果: