Hi
try this:
p3dpairs <- function(x,x1,
xlim=NULL,ylim=NULL,zlim=NULL,col=par("col"),
pch=par("pch"),
cex=par("cex"), ...){
if(is.matrix(x)){
z <- x[,3]
y <- x[,2]
x <- x[,1]
}
if(is.matrix(x1)){
z1 <- x1[,3]
y1 <- x1[,2]
x1 <- x1[,1]
}
if(missing(zlim)) {
z.grid <- matrix(range(z),2,2)
} else {
z.grid <- matrix(zlim,2,2)
}
if(missing(xlim)){ xlim <- range(x) }
if(missing(ylim)){ ylim <- range(y) }
persp(xlim, ylim, z.grid, col = NA, border=NA, ...) -> res
trans3d <- function(x,y,z, pmat) {
tr <- cbind(x,y,z,1) %*% pmat
list(x = tr[,1]/tr[,4], y= tr[,2]/tr[,4])
}
out <- trans3d(x,y,z,pm=res)
out1 <- trans3d(x1,y1,z1,pm=res)
points(out, col=col, pch=pch, cex=cex, ...)
for(i in 1:length(out$x)){
lines(c(out$x[i],out1$x[i]),c(out$y[i],out1$y[i]), col="gray",
...)
}
return(invisible(out))
}
then
a <- matrix(rnorm(60),20,3)
b <- a
b[,3] <- 0
p3dpairs(a,b)
gives you a good approximation to what you want
HTH
rksh>
>
>>This is a follow up to my question from yesterday. I want to do in R
>>what is called a "3d scatter plot with drop lines" in S-PLUS.
>>
>>Basically, it's a 3dscatterplot with lines connecting the x-y grid
to
>>the z points.
>>The lines give a better perspective on the shape of the data surface.
>>
>>How to?
>>
>>Joel Bremson
>>UC Davis Statistics
>>
>>______________________________________________
>>R-help@stat.math.ethz.ch mailing list
>>https://stat.ethz.ch/mailman/listinfo/r-help
>>PLEASE do read the posting guide!
http://www.R-project.org/posting-guide.html
>
>
>--
>
>Robin Hankin
>Uncertainty Analyst
>Southampton Oceanography Centre
>SO14 3ZH
>tel +44(0)23-8059-7743
>initialDOTsurname@soc.soton.ac.uk (edit in obvious way; spam precaution)
--
Robin Hankin
Uncertainty Analyst
Southampton Oceanography Centre
SO14 3ZH
tel +44(0)23-8059-7743
initialDOTsurname@soc.soton.ac.uk (edit in obvious way; spam precaution)
[[alternative HTML version deleted]]