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))
答案 0 :(得分:7)
包中的surface3d
函数:rgl看起来很不错。创建一个包含你的函数的包装器,用seq()
创建一组xy向量,然后用f2作为FUN参数将这些向量传递给outer
,然后调用{ {1}}。
还有一个surface3d
作者(Duncan Murdoch和其他人)说的是“更高级别”,它确实会默认添加轴,而surface3d则没有。
persp3d
现在我进一步思考,您可以使用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()
一起使用它的能力取决于它是由所有矢量化操作组成的。如果它们没有矢量化,我们需要使用outer
或Vectorize
重写。
答案 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)
答案 3 :(得分:1)
persp3d()
函数可以将函数作为参数。请参阅?persp3d.function
。
它允许绘制两种表面:x
和y
的函数,以及参数曲面,其中x
,y
和{ {1}}是其他两个变量的所有函数。
对于您的示例,它就像
一样简单z
但当然您可以添加各种装饰,例如颜色取决于f2 <- function(x, y) x + y
persp3d(f2)
,更改z
和x
的范围等。