所以,我花了最后四个小时试图找到一种有效的方法来绘制一个带有两个变量的函数的曲线 - 无济于事。我实际可以实践的唯一答案是没有像我预期的那样生成多线图。
我创建了一个带有两个变量x和y的函数,它返回一个连续的数值。我想在单个屏幕中绘制此函数的结果,其中x的某些值和给定范围内的y的所有可能值(y也是连续变量)。
像这样的东西:
这两个问题确实有所帮助,但我仍然无法实现:
Plotting a function curve in R with 2 or more variables
How to plot function of multiple variables in R by initializing all variables but one
我还使用了马赛克包和plotFun函数,但结果相当不吸引人且不太可读:https://www.youtube.com/watch?v=Y-s7EEsOg1E。
也许问题是我对R的熟练程度不足 - 尽管我已经使用了几个月所以我不是那么的菜鸟。请赐教。
假设我们有一个带有两个参数的简单函数:
fun <- function(x, y) 0.5*x - 0.01*x^2 + sqrt(abs(y)/2)
我们想要根据以下x和y值来评估它:
xs <- seq(-100, 100, by=1)
ys <- c(0, 100, 300)
下面的这一行可能有点难以理解,但它完成了所有工作:
res <- mapply(fun, list(xs), ys)
mapply
允许我们在一系列值中运行具有多个变量的函数。这里我们只为“x”参数提供一个值(注意xs是一个长向量,但因为它在列表中 - 它只是一个实例)。我们还提供了多个“y”参数值。因此,该函数将使用相同的x值和不同的y值运行3次。
结果按列排列,所以最后我们有3列。现在我们只需要绘制:
cols <- c("black", "cornflowerblue", "orange")
matplot(xs, res, col=cols, type="l", lty=1, lwd=2, xlab="x", ylab="result")
legend("bottomright", legend=ys, title="value of y", lwd=2, col=cols)
这里matplot
函数完成所有工作 - 它为所提供矩阵中的每一列绘制一条线。其他一切都是装饰。
结果如下: