8

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

4 回答 4

7

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

平面的可旋转pseudo3d 图

persp()现在我进一步考虑它,你可以用or做类似的事情wireframe()。“技巧”是使用外部(...,FUN=fun)。而且当我进一步考虑时……使用它的能力outer取决于它由所有矢量化操作组成。如果它们没有被矢量化,我们需要用Vectorizeor重写mapply

于 2012-08-09T02:33:20.087 回答
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")
于 2013-08-23T16:35:43.413 回答
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)

在此处输入图像描述

于 2018-08-29T15:17:21.923 回答
1

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

它允许绘制两种类型的曲面: 和 的函数,xy您所愿,以及参数曲面,其中xy都是z其他两个变量的函数。

对于您的示例,它就像

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

但当然你可以添加各种装饰,比如让颜色取决于,改变andz的范围等。xy

于 2016-02-22T19:06:08.540 回答