2011-03-22 36 views
5

背景:我正在尝试使用R的lattice :: cloud()函数为旋转的3D散点图创建动画。我在R中创建一个PNG图像序列,然后从序列创建一个动画GIF。如何保存旋转格子云散射图的尺度?

问题是,绘图的比例随着旋转而变化,所以动画立方体在转动时看起来会增长和缩小。

下面是仅使用两个地块(基于云的例子之一)的一个例子:

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)) 

我想右边图显示的尺寸与左侧的情节一样。在这个例子中它比较小。我不必使用R或格::云(),但它非常接近我想要的...

尝试rgl,看起来也许我的rgl副本与我的R版本不兼容。我会升级R'当我有一分钟:

> 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 

我更新至R 2.12.2,现在这工作(使用的替代ImageMagick GraphicsMagick工具):

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') 

回答

3

尝试RGL包,这个是我如何接近相同的现象

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) 

我已确认的工作示例的会话信息。

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 
+0

@OneWhoIsUnnamed这看起来很有希望,但由于某些原因,movie3d()无法创建输出文件。它为每个帧创建空的png文件,并记录一个错误,如“Writing movie115.png [1]”failed“。 – 2011-03-22 23:29:12

+0

另外plot3d()似乎对cloud()的外观没有相同的控制级别。如何更改默认窗口大小和轴标签的大小?谢谢! – 2011-03-22 23:31:03

+0

@Kent Johnson我不确定为什么movie3d()会失败,上面的工作在我的机器上没有错误,但是授予的不是您正在寻找的东西,而是一个说明性示例。为了排除故障,你可以发布sessionInfo()的输出吗?也许这是一个R版本的问题。也可以发布一个你用来得到这个错误的最小命令的例子吗?尝试复制此错误对我来说很有用。 – 2011-03-23 13:40:43