2016-02-02 2 views
-1

У меня есть некоторые проблемы с генерацией .png из каждой строки кадра данных..png вывод для каждой строки data.frame и создания .gif анимации

В принципе, я хочу rbind каждый из строк df до coordinate_sys.

Для каждой строки df вместе с coordinate_sys, система координат и один единичный вектор «J», должен быть сформирован как в this

Наконец, после генерации файла .png для каждого unit_vector, Я хотел бы сделать .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) 
+0

Какой смысл давать downvote? – Alexander

+0

Вы можете попробовать похожие на [это] (http://www.inside-r.org/packages/cran/rgl/docs/rgl.postscript) – akrun

+0

@akrun Ваш предыдущий ответ был прекрасен, но до сих пор не требуется никакого вращения. На каждом участке показан только один вектор J. ThaTs все, что я действительно хочу. В вашем ответе все графики одинаковы, кроме угла поворота. – Alexander

ответ

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

большое спасибо за ваше время и усилия. Я знал, что для этого кода нужен расширенный опыт;) – Alexander