每行 data.frame 输出 .png 并制作 .gif 动画
.png output for each row of data.frame and making .gif animation
我在从数据框的每一行生成 .png 时遇到了一些问题。
基本上,我想 rbind
df
到 coordinate_sys
行的每一行。
对于 df
和 coordinate_sys
的每一行,应该像 this
一样生成一个坐标系和一个单位向量 "J"
最后,在为每个 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)
这是我得到的结果:
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')
我在从数据框的每一行生成 .png 时遇到了一些问题。
基本上,我想 rbind
df
到 coordinate_sys
行的每一行。
对于 df
和 coordinate_sys
的每一行,应该像 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)
这是我得到的结果:
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')