背景:我正在尝试使用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或lattice :: cloud()但它非常接近我想要的......
尝试使用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,现在可以使用(使用GraphicsMagick代替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')
答案 0 :(得分: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