回転した格子クラウド散布図のスケールを維持する方法は?
質問
背景:Rの格子:: Cloud()関数を使用して、回転する3D散布図をアニメーション化しようとしています。 Rで一連のPNG画像を作成し、シーケンスからアニメーションGIFを作成します。
問題は、プロットのスケールが回転とともに変化するため、アニメーションキューブが成長して縮小するように見えることです。
以下は、2つのプロットのみを使用した例です(クラウドの例の1つに基づいて):
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と互換性がないように見えます。
> 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')
解決
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
所属していません StackOverflow