R相当于曲线函数的3D?

时间:2012-08-09 02:25:31

标签: r 3d rgl

R中的curve函数提供了一种绘制函数的简单方法。例如,这将绘制一条直线

f1 <- function(x) x
curve(f1, from=-1, to=1)

R中是否有一个等价函数,它带有一个带有两个参数的函数(例如xy)和两个变量的范围并生成一个3D图?

例如,假设我有以下功能

f2 <- function(x, y) x + y

是否有类似以下的命令?

curve_3d(f2, x_range=c(-1, 1), y_range=c(-1, 1))

4 个答案:

答案 0 :(得分:7)

包中的surface3d函数:rgl看起来很不错。创建一个包含你的函数的包装器,用seq()创建一组xy向量,然后用f2作为FUN参数将这些向量传递给outer,然后调用{ {1}}。

还有一个surface3d作者(Duncan Murdoch和其他人)说的是“更高级别”,它确实会默认添加轴,而surface3d则没有。

persp3d

Rotatable pseudo3d plot of plane

现在我进一步思考,您可以使用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()做类似的事情。 “技巧”是使用外部(...,FUN = fun)。而且我更进一步思考......与wireframe()一起使用它的能力取决于它是由所有矢量化操作组成的。如果它们没有矢量化,我们需要使用outerVectorize重写。

答案 1 :(得分:2)

请参阅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")

答案 2 :(得分:2)

您可以使用plot3Drgl软件包进行交互式绘图。

library(plot3Drgl)

f <- function(x,y) x+y
x <- y <- seq(-4,4,len=20)
z <- outer(x, y, f)

persp3Drgl(z=z)

enter image description here

答案 3 :(得分:1)

persp3d()函数可以将函数作为参数。请参阅?persp3d.function

它允许绘制两种表面:xy的函数,以及参数曲面,其中xy和{ {1}}是其他两个变量的所有函数。

对于您的示例,它就像

一样简单
z

但当然您可以添加各种装饰,例如颜色取决于f2 <- function(x, y) x + y persp3d(f2) ,更改zx的范围等。