在 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)
结果:
我需要生成具有不同总面积(总和为 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)
结果: