每行data.frame和.gif动画的.png输出

时间:2016-02-02 00:59:18

标签: r animation png apply rgl

从每行数据帧生成.png时遇到一些麻烦。

基本上,我想rbinddf的每一行coordinate_sys

对于dfcoordinate_sys的每一行,一个坐标系和一个单位向量" J"应该像this

一样生成

最后,在为每个unit_vector生成一个.png文件之后,我想制作.gif动画。

这是我的脚本的可重现代码;

library(matlib)
library(rgl)
set.seed(12)
x <- runif(10,-0.14,0.1)
y <- runif(10,-0.14,0.1)
z <-sort(runif(10,-0.9,0.9),decreasing=TRUE)
df <- data.frame(x,y,z)


rot <- function(df,out){
  coordinate_sys <- rbind(c(1,0,0),c(0,-1,0),c(0,0,1))
  vec <- rbind(coordinate_sys, unlist(df))
  rownames(vec) <- c("X", "Y", "Z", "J")
  print(vectors3d(vec, col=c(rep("black",3), "red"), lwd=2))
 out <-  png(file="example%02d.png", width=200, height=200)
  dev.off()
}

apply(df, 1,rot,out)

1 个答案:

答案 0 :(得分:1)

这是我走了多远:

rot <- function(dat, i){
  coordinate_sys <- rbind(c(1,0,0),c(0,-1,0),c(0,0,1))
  vec <- rbind(coordinate_sys, unlist(dat))
  rownames(vec) <- c("X", "Y", "Z", "J")
  open3d()
  plot3d(1, xlim = c(-1, 1), ylim = c(-1, 1), zlim = c(-1, 1), type = 'n')
  print(vectors3d(vec, col=c(rep("black",3), "red"), lwd=2))
  rgl.snapshot(paste0(letters[i], '.png'))
  rgl.close()
}

mapply(rot, split(df, 1:nrow(df)), i = 1:nrow(df))

此代码将生成10个.png图像,每个图像中包含一个向量和一个稳定的坐标系。 (但它会产生警告。)

现在,我们应该能够使用动画包将其变成.gif文件,但由于ImageMagick不想读取.png文件(?),因此它在我的机器上失败了。也许它会对你有用。

library(animation)
im.convert('*.png')