2016-06-14 2 views
2

Je ne suis pas un pro, autodidacte - merci pour votre aide!Utilisation de skipRedraw dans R {rgl} lors de la rotation plot3d

J'ai trouvé le code suivant à ma satisfaction, ce qui me donne un tracé 3D de mes données et je peux le faire pivoter automatiquement. Cependant, je veux arrêter le redessin automatique des axes pendant qu'il tourne. J'ai trouvé beaucoup de ressources en utilisant par3d (skipRedraw = TRUE) mais je n'arrive pas à comprendre comment l'incorporer dans mon code, tout cela me dépasse un peu. De plus, (j'allais renoncer à celui-ci mais puisque je le demande de toute façon) j'aimerais aussi que les étiquettes des axes restent à côté des graduations de l'axe (plutôt que de l'autre côté) /d'un autre côté). Mais c'est secondaire.

Merci d'avance!

mydata<-read.csv(file=file.choose(),header=TRUE,row.names=1) 
mydata$Colour<-factor(mydata$ColourB,levels=c("Black","Blue","Red","Green","Yellow","Purple","Brown")) 
colourb<-as.character(mydata$ColourB) 
library(rgl) 
open3d() 
plot3d(mydata[,"Sr"], 
    mydata[,"Rb"], 
    mydata[,"Zr"], 
    xlab="Sr (ppm)", 
    ylab="Rb (ppm)", 
    zlab="Zr (ppm)", 
    pch=21, 
    col=colourb, 
    type="s", 
    radius=10 
) 
bgplot3d({ 
    plot.new() 
    title(main = 'Trace Elements', line = 1) 
}) 
play3d(spin3d(axis=c(0,0,1), rpm=10), duration=10) 
+0

La deuxième partie de réponse à votre question ici: . Ce n'est pas facile. Je ne suis pas sûr de ce que vous voulez faire, et votre code ne peut pas être exécuté par d'autres, donc je ne peux pas aider avec la première partie. – user2554330

Répondre

0

Il est facile d'arrêter le redessin automatique des axes. Lorsque vous utilisez des axes bbox (par défaut), ils sont redessinés. Donc, vous utilisez simplement des axes fixes. (Edited: Je pourrais comprends mal votre quiestion.)

Voici mon exemple (en utilisant les données trees):

open3d() 
plot3d(trees, type="s", radius=0.4, col="red", xlab="xxx", ylab="yyy", zlab="zzz", 
     axes=F) # not use bbox-axes 
axes3d(edges = c("x","y","z")) # draw fixed position axes 
box3d()      # if you need, draw full box 

bgplot3d({ 
    plot.new() 
    title(main = 'Trees', line = 1) 
}) 
play3d(spin3d(axis=c(0,0,1), rpm=10), duration=10) 


# PS: skipRedraw isn't what you think. 
plot3d(trees) 
par3d(skipRedraw = T) # you can't turn the graph by drag 
+0

Je ne pense pas que ce soit ce que le PO veut faire. Je pense que faire tourner l'objet à l'intérieur de la boîte sans qu'il ne bouge est ce qui est désiré. –

+0

Avant de répondre, j'aurais dû apprendre les bonnes manières. Merci de me le faire savoir !!! Quant à votre premier commentaire, je ne peux pas dire avec certitude ..., mais vous avez peut-être raison. – cuttlefish44

+0

Il n'est pas clair, mais sinon ce serait trop facile. Je pense que l'on pourrait peut-être modifier 'par3dinterp' pour interpoler la matrice de modélisation, mais cela n'a pas été le cas. –