yihui pos opts_chunk name example asp r animation knitr rgl rnw

pos - Gráficos animados de rgl con knitr



knitr:: opts_chunk (1)

Tengo un ejemplo basado en el tuyo que funciona usando knitr en Windows 8.1 dentro de RStudio 0.99.441.

Esto produce una animación de 40 cuadros de la trama. Utiliza el hook_plot_custom para incluir los gráficos que se generan manualmente animando el gráfico 3D. El código para la animación se basó en los de la ayuda y la fuente de play3d y movie3d . movied3d sí mismo no se puede usar porque es demasiado inflexible en su nombre de archivo.

Lo he puesto en github en https://github.com/NikNakk/testAnimateRgl/ . El pdf está en https://github.com/NikNakk/testAnimateRgl/raw/master/rglKnitr.pdf

/documentclass{article} /usepackage{animate} << label = setup, include = FALSE>>= library("rgl") library("car") library("knitr") knit_hooks$set(rgl = hook_plot_custom) @ /begin{document} << label=rgl1, rgl=TRUE, fig.show=''animate'', fig.width=5, fig.height=5, out.width=''.6//linewidth'', dev=''png'', fig.num = 40, interval=0.1>>= scatter3d(prestige ~ income + education, data=Duncan) M <- par3d("userMatrix") par3d(windowRect = 100 + opts_current$get("dpi") * c(0, 0, opts_current$get("fig.width"), opts_current$get("fig.height"))) spinFunc <- par3dinterp(userMatrix=list(M, rotate3d(M, pi/2, 1, 0, 0), rotate3d(M, pi/2, 0, 1, 0))) for(i in 1:40) { par3d(spinFunc(i / 10)) Sys.sleep(0.05) rgl.snapshot(fig_path(".png", number = i), fmt = "png") } @ /end{document}

Editar: Nueva versión

Aquí hay otra versión que demuestra el uso de opciones de fragmentos personalizados para establecer los parámetros para el spin3d bastante simple. Tenga en cuenta que con esta versión, el fragmento es solo una línea (el gráfico scatter3d ). spin3d.axis se usa para establecer el parámetro de eje a spin3d ; spin3d.rpm se utiliza para establecer el parámetro rpm . El número de imágenes y el intervalo entre las imágenes se establece usando los parámetros estándar fig.num e interval .

/documentclass{article} /usepackage{animate} << label = setup, include = FALSE>>= library("rgl") library("car") library("knitr") hook_rgl_spin <- function(before, options, envir) { if (!before) { par3d(windowRect = 100 + options$dpi * c(0, 0, options$fig.width, options$fig.height)) if (!is.null(options$spin3d.axis)) { spin3d.axis <- options$spin3d.axis } else { spin3d.axis <- c(0, 0, 1) } if (!is.null(options$spin3d.rpm)) { spin3d.rpm <- options$spin3d.rpm } else { spin3d.rpm <- c(0, 0, 1) } spinFunc <- spin3d(axis = spin3d.axis, rpm = spin3d.rpm) for(i in 1:options$fig.num) { par3d(spinFunc(i * options$interval)) Sys.sleep(0.05) rgl.snapshot(fig_path(".png", number = i), fmt = "png") } hook_plot_custom(before, options, envir) } } knit_hooks$set(rgl = hook_rgl_spin) @ /begin{document} << label=rgl1, rgl=TRUE, fig.show=''animate'', fig.width=5, fig.height=5, out.width=''.6//linewidth'', dev=''png'', fig.num = 40, interval=0.1, spin3d.axis=c(0, 0, 1), spin3d.rpm = 20>>= scatter3d(prestige ~ income + education, data=Duncan) @ /end{document}

Quiero incluir gráficos animados de rgl en mi documento knitr través de knitr . Aquí está mi MWE:

/documentclass{article} << label = setup, include = FALSE>>= opts_chunk$set(fig.path = ''figure/'', cache = FALSE, dev = "pdf", fig.align = ''center'', fig.show = ''hold'', fig.width = 3, fig.height = 3, echo = TRUE, warning = FALSE, message = FALSE, size = ''footnotesize'', comment=NA, results=''hold'') knit_hooks$set(par = function(before, options, envir){ if (before && options$fig.show!=''none'') par(mar = c(4, 4, 0.1, 0.1), cex.lab = 0.95, cex.axis = 0.9, mgp = c(2, 0.7, 0), tcl = -0.3) } ) knit_hooks$set(rgl = function(before, options, envir) { if (!before) { ## after a chunk has been evaluated if (rgl.cur() == 0) return() # no active device name = paste(options$fig.path, options$label, sep = '''') rgl.snapshot(paste(name, ''.png'', sep = ''''), fmt = ''png'') return(paste(''//includegraphics{'', name, ''}/n'', sep = '''')) } } ) options(replace.assign = TRUE, width = 60) @ /begin{document} << label=packages >>= library(car) @ << label=rgl1, rgl=TRUE, fig.show=''animate'' >>= scatter3d(prestige ~ income + education, data=Duncan) @ /end{document}

No estoy obteniendo gráficos en mis documentos tejidos. Cualquier ayuda será muy apreciada. Gracias

Actualizado

Todavía no puedo hacer que funcione y recibir la siguiente advertencia:

Warning messages: 1: In rgl.snapshot(paste(name, ".png", sep = ""), fmt = "png") : RGL: Pixmap save: unable to open file ''D:/A B/C D UAF/Test/knitr/rglAnimation/figure/rgl1.png'' for writing 2: In rgl.snapshot(paste(name, ".png", sep = ""), fmt = "png") : snapshot failed 3: running command ''"C:/PROGRA~2/MIKTEX~1.9/miktex/bin/x64/texi2dvi.exe" --quiet --pdf "rglAnimation.tex" --max-iterations=20 -I "C:/PROGRA~1/R/R-31~1.1/share/texmf/tex/latex" -I "C:/PROGRA~1/R/R-31~1.1/share/texmf/bibtex/bst"'' had status 1

Mi sessionInfo() es

R version 3.1.1 (2014-07-10) Platform: x86_64-w64-mingw32/x64 (64-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] tools stats graphics grDevices utils datasets methods [8] base other attached packages: [1] mgcv_1.8-2 nlme_3.1-117 rgl_0.93.1098 car_2.0-21 knitr_1.6.15 loaded via a namespace (and not attached): [1] evaluate_0.5.5 formatR_1.0 grid_3.1.1 highr_0.3 [5] lattice_0.20-29 MASS_7.3-34 Matrix_1.1-4 nnet_7.3-8 [9] stringr_0.6.2

Editado

Cambiando fig.path = ''figure/'' a fig.path = '''' en opts_chunk$set compila el documento con gráficos png pero sin animación. Agradecería mucho si algunos me guiaran cómo obtener gráficos animados de rgl con fig.path = ''figure/'' . Gracias