你可以使用
persp
函数绘制三维图形(如果你从数据中绘制而不是公式,则需要首先使用某种形式的密度估计,示例图看起来足够平滑,可能是基于公式而不是从数据估计得出的)。然后使用
persp
的返回值投射其他绘图信息。
也可能有一种选项使用rgl包,我记得它有一种方法将绘图投影到轴平面上。
编辑
这里有一些示例代码供您开始。它使用参数分布,但可以改编为使用MASS中的
kde2d
或其他从数据中估计密度的方式:
x <- seq( -3, 3, length=25 )
y <- seq( -3, 3, length=25 )
z <- outer( x, y, function(x,y) dnorm(x,0,0.5)*dnorm(y,0,1) )
zl <- c(0,4*max(z))
trmat <- persp(x,y,z, theta=120, zlim=zl, box=FALSE, shade=0.5)
for( i in seq(-3,3, by=0.5 ) ) {
lines( trans3d( c(i,i), c(-3,-3), zl, trmat ), col='grey' )
}
for( i in seq(0,zl[2], length=7) ) {
lines( trans3d( c(-3,3), c(-3,-3), c(i,i), trmat ), col='grey' )
}
lines( trans3d( seq(-3,3,length=100), -3, dnorm(seq(-3,3,length=100),0,.5),
trmat), lwd=2, col='blue' )
for( i in seq(-3,3, by=0.5 ) ) {
lines( trans3d( c(-3,-3), c(i,i), zl, trmat ), col='grey' )
}
for( i in seq(0,zl[2], length=7) ) {
lines( trans3d( c(-3,-3), c(-3,3), c(i,i), trmat ), col='grey' )
}
lines( trans3d( -3, seq(-3,3,length=100), dnorm(seq(-3,3,length=100),0,1),
trmat), lwd=2, col='blue' )
![在这里输入图片描述](https://istack.dev59.com/jKZPR.webp)