Comment préserver l'échelle du tracé de dispersion des nuages de réseau tourné?
Question
Contexte: J'essaie d'animer un tracé de diffusion 3D rotatif à l'aide de la fonction Lattice :: Cloud (). Je crée une séquence d'images PNG dans R, puis crée un GIF animé à partir de la séquence.
Le problème est que l'échelle de l'intrigue change avec la rotation de sorte que le cube animé semble se développer et rétrécir en se tournant.
Voici un exemple utilisant seulement deux parcelles (basée sur l'un des exemples de nuages):
library(lattice)
par.set <-
list(axis.line = list(col = "transparent"),
clip = list(panel = "off"))
print(cloud(Sepal.Length ~ Petal.Length * Petal.Width,
data = iris, cex = .8,
groups = Species,
screen = list(z = 0, x = 0, y = 0),
par.settings = par.set,
scales = list(col = "black")),
split = c(1,1,2,1), more = TRUE)
print(cloud(Sepal.Length ~ Petal.Length * Petal.Width,
data = iris, cex = .8,
groups = Species,
screen = list(z = 0, x = 0, y = 30),
par.settings = par.set,
scales = list(col = "black")),
split = c(2,1,2,1))
J'aimerais que l'intrigue droite apparaisse de la même taille que l'intrigue de gauche. Dans cet exemple, c'est un peu plus petit. Je n'ai pas à utiliser R ou Lattice :: Cloud () mais c'est très proche de ce que je veux ...
Essayant RGL, il semble que ma copie de RGL soit incompatible avec ma version de R. Je vais mettre à niveau R quand j'aurai une minute:
> library(rgl)
> df <- data.frame(x=runif(10,0,1), y=runif(10,0,1), z=runif(10,0,1), color=round(runif(10,1,3)))
> plot3d(df$x, df$y, df$z, col=df$color, size=2, type='s')
> rgl.snapshot("C:\\pic.png", fmt="png", top=TRUE )
[1] "failed"
Warning messages:
1: In rgl.snapshot("C:\\pic.png", fmt = "png", top = TRUE) :
RGL: PNG Pixmap Saver Warning: Application was compiled with png.h from libpng-1.2.40
2: In rgl.snapshot("C:\\pic.png", fmt = "png", top = TRUE) :
RGL: PNG Pixmap Saver Warning: Application is running with png.c from libpng-1.4.1
3: In rgl.snapshot("C:\\pic.png", fmt = "png", top = TRUE) :
RGL: PNG Pixmap Saver Warning: Incompatible libpng version in application and library
> sessionInfo()
R version 2.11.1 (2010-05-31)
i386-pc-mingw32
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rgl_0.92.798
loaded via a namespace (and not attached):
[1] tools_2.11.1
J'ai mis à jour vers R 2.12.2 et maintenant cela fonctionne (en utilisant GraphicsMagick au lieu d'imageMagick):
open3d()
with(iris, plot3d(Petal.Length, Petal.Width, Sepal.Length, col=Species))
movie3d(spin3d(), duration=12, dir="C:\\Movie", convert=FALSE)
system('"C:\\program files\\graphicsmagick-1.3.7-q8\\gm.exe" convert -delay 12 C:\\Movie\\movie*.png C:\\Movie\\animate.gif')
La solution
Essayez le package RGL, c'est ainsi que j'ai approché la même phénomène
require ("rgl")
df <- data.frame(x=runif(10,0,1), y=runif(10,0,1), z=runif(10,0,1), color=round(runif(10,1,3)))
plot3d(df$x, df$y, df$z, col=df$color, size=2, type='s')
?movie3d()
demo(flag)
test <- spin3d(rpm=6,axis=c(0,0,1))
?spin3d
open3d()
plot3d(oh3d(col="lightblue", alpha=0.5))
play3d(spin3d(axis=c(0,0,1), rpm=20), duration=3)
open3d()
plot3d( cube3d(col="green") )
M <- par3d("userMatrix")
play3d( par3dinterp( userMatrix=list(M,
rotate3d(M, pi/2, 1, 0, 0),
rotate3d(M, pi/2, 0, 1, 0) ) ),
duration=4 )
movie3d( spin3d(), duration=5 )
Mes informations de session pour un exemple de travail confirmé.
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rgl_0.92.798
loaded via a namespace (and not attached):
[1] tools_2.12.2