[R] drawing lines in 3D (rotating them)

cgenolin at u-paris10.fr cgenolin at u-paris10.fr
Tue May 20 22:19:16 CEST 2008


Hi the list,

I write a short function to draw lines in 3D, showing then turning.
At some point, I add "delais" to slow down the rotation.


So two questions:

1) I try to find a library to draw animate lines in 3D but I did not 
find. That surprise me since it is very simple to do. Did I forget to 
look somewhere ?

If it does not exists and I have to use my own function :
2) Is it possible to use the time wasted in delais for some calculous ? 
In other word, can I run some calculous during a certain amount of 
time, then drawing a plot, then calculous then plot...

3) Is there a way to end the rotation less violant than Esc ?

Thanks for your help.

Here is my code :


----- 8< ---------------------------
data <- array(c(13,14,13,15, 14,15,16,15, 16,17,16,18 , 45,46,85,59, 
43,58,70,56, 45,75,65,65),
                dim=c(4,3,2),dimnames=c("id","temps","var"))

plot3Dlines <- function(x,y,mean=TRUE,angle=20,delais=100000,color,...){
    time <- 1:dim(x)[[2]]
    var1 <- seq(min(x[,,1],na.rm=TRUE),max(x[,,1],na.rm=TRUE),length.out=11)
    var2 <- matrix(NA,length(time),length(var1))#outer(x, y, NA)
    var2[1,1] <- min(x[,,2],na.rm=TRUE)
    var2[length(time),length(var1)] <- max(x[,,2],na.rm=TRUE)
    nbLines<-min(100,dim(x)[1])
    if(missing(color)){color<-2:(nbLines+1)}else{}
    repeat{
        res <- persp(x=time, y=var1, z=var2, theta = angle,             
         phi = 10, expand = 0.5, col = "lightblue",
                     ltheta = 120, shade = 0.75, ticktype = "detailed",
                     xlab = "time", ylab = "var1", zlab = "var2")
        angle <- angle+1
        for(i in 1:nbLines){
            yy=x[i,,1]
            zz=x[i,,2]
            lines (trans3d(time, yy, zz, pmat = res),col=color[i])
        }
        for(k in 1:delais){}
    }
}
plot3Dlines(data)
------------------------------------

Thanks

Christophe



More information about the R-help mailing list