在R中为3D绘图添加标记

时间:2012-12-12 20:00:53

标签: r

我需要在3D绘制的关节密度函数中标记某些观察值的位置 - 我设想在密度图中添加一个矢量(x,y,f(x,y)+ something_small),显示该点在哪里。我尝试过使用trans3d(),但是没有用。

以下是一个例子:

library(MASS)
Sigma <- matrix(c(12,1,1,12),2,2)
Sample <- mvrnorm(n=1000, rep(0, 2), Sigma)
empDen <- kde2d(Sample[,1],Sample[,2])
par(bg = "white")

x <- empDen$x
y <- empDen$y
z <- empDen$z
nrz <- nrow(z)
ncz <- ncol(z)
jet.colors <- colorRampPalette( c("lightblue", "blue") ) 
nbcol <- 100
color <- jet.colors(nbcol)
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
facetcol <- cut(zfacet, nbcol)
persp(x, y, z, col = color[facetcol], phi = 15, theta = -50, xlab="x", ylab="y", zlab="Empirical Joint Density", border=NA)

问题是:如何指示样本[1,]出现在关节密度中的哪个位置,即将其添加到图中?

感谢您的任何提示!

1 个答案:

答案 0 :(得分:1)

这有效:

fmt=persp(x, y, z, col = color[facetcol], phi = 15, theta = -50, xlab="x", ylab="y", zlab="Empirical Joint Density", border=NA)
pt = Sample[1,]
points(trans3d(pt[1],pt[2],.001,fmt),pch=20, col="Red")
lines(trans3d(c(pt[1],pt[1]), c(pt[2],pt[2]), c(0,.001),fmt),col="Red",cex=2) 

尽管如此,用基于经验联合密度的一些信息替换.001而不是手动指定每个点的值会很好。