R 中的curve函数提供了一种绘制函数的简单方法。例如,这将绘制一条直线
f1 <- function(x) x
curve(f1, from=-1, to=1)
R 中是否有一个等效函数,它接受一个带有两个参数(例如x和y)的函数和两个变量的范围并生成 3D 图?
例如,假设我有以下功能
f2 <- function(x, y) x + y
有没有类似下面的命令?
curve_3d(f2, x_range=c(-1, 1), y_range=c(-1, 1))
package:rgl 中的surface3d函数看起来很匹配。创建一个包装器将非常简单,该包装器将采用您的函数,创建一组 xy 向量,seq()然后将这些向量传递给outer您的 f2 作为 FUN 参数,然后调用surface3d.
还有一个persp3d作者(邓肯默多克,也许还有其他人)说是“更高级别”,它似乎默认添加了轴,而 Surface3d 没有。
curve_3d <- function(f2, x_range=c(-1, 1), y_range=c(-1, 1), col=1:6 ){
if (!require(rgl) ) {stop("load rgl")}
xvec <- seq(x_range[1], x_range[2], len=15)
yvec <- seq(y_range[1], y_range[2], len=15)
fz <- outer(xvec, yvec, FUN=f2)
open3d()
persp3d( xvec, yvec, fz, col=col) }
curve_3d(f2)
snapshot3d("out3dplane.png")

persp()现在我进一步考虑它,你可以用or做类似的事情wireframe()。“技巧”是使用外部(...,FUN=fun)。而且当我进一步考虑时……使用它的能力outer取决于它由所有矢量化操作组成。如果它们没有被矢量化,我们需要用Vectorizeor重写mapply。
请参阅curve3d(),package:emdbook它是 、 等的包装wireframe()器persp3d()。
library(emdbook)
# bivariate normal density with emdbook::curve3d
curve3d(expr = dmvnorm(x=c(x,y), mu = c(0,0), Sigma = diag(2)),
from = c(-3,-3), to = c(3,3), n = 100, sys3d = "wireframe")
该persp3d()函数可以将函数作为参数。见?persp3d.function。
它允许绘制两种类型的曲面: 和 的函数,x如y您所愿,以及参数曲面,其中x和y都是z其他两个变量的函数。
对于您的示例,它就像
f2 <- function(x, y) x + y
persp3d(f2)
但当然你可以添加各种装饰,比如让颜色取决于,改变andz的范围等。xy