0

我需要标记某些观测值出现在 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)

问题是:我如何指出 Sample[1,] 在联合密度中出现的位置,即将它添加到图中?

感谢您的任何提示!

4

1 回答 1

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) 

虽然,用一些基于经验联合密度的信息代替 0.001 会很好,而不是手动指定每个点的值。

于 2012-12-12T20:37:06.550 回答