在“中使用用户定义的函数”;“曲线”;R图形中的函数

在“中使用用户定义的函数”;“曲线”;R图形中的函数,r,graphics,ggplot2,user-defined-functions,R,Graphics,Ggplot2,User Defined Functions,我需要生成具有不同总面积的正态分布密度图(总和为1)。使用以下函数,我可以指定lambda-它给出了相对面积: sdnorm <- function(x, mean=0, sd=1, lambda=1){lambda*dnorm(x, mean=mean, sd=sd)} 但是我真的想在BaseR图形中这样做,我想我需要使用“curve”函数。但是,我正在努力让它工作。您可以在BaseR中执行以下操作 x <- seq(0, 50, 1) plot(x, sdnorm(x, m

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

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


但是我真的想在BaseR图形中这样做,我想我需要使用“curve”函数。但是,我正在努力让它工作。

您可以在BaseR中执行以下操作

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))

x如果查看
的帮助文件?曲线
,您将看到第一个参数可以是许多不同的东西:

函数名,或作为x函数编写的调用或表达式,其计算结果与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)
结果是:


干得好-谢谢!我没想到先把x定义为一个序列,然后再得到值。啊!现在我明白我做错了什么-我没有为曲线函数指定“from”和“to”参数。默认显示范围为0到1。干得好-谢谢。
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)