Je veux inclure des graphiques rgl
dans mon document knitr
via knitr
. Voici mon MWE:
\documentclass{article} <
Je ne reçois pas de graphique dans mes documents sortingcotés. Toute aide sera grandement appréciée. Merci
Je n’arrive toujours pas à le faire fonctionner et à recevoir l’avertissement suivant:
Warning messages: 1: In rgl.snapshot(paste(name, ".png", sep = ""), fmt = "png") : RGL: Pixmap save: unable to open file 'D:\AB\CD 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
Mon sessionInfo()
est
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 Masortingx_1.1-4 nnet_7.3-8 [9] ssortingngr_0.6.2
Édité
Changer fig.path = 'figure/'
en fig.path = ''
dans opts_chunk$set
comstack le document avec des graphes png
mais sans aucune animation. J’apprécierais beaucoup si certains me rgl
sur la façon d’obtenir des graphes rgl
animés avec fig.path = 'figure/'
. Merci
J’ai un exemple basé sur le vôtre qui fonctionne en utilisant knitr sur Windows 8.1 dans RStudio 0.99.441.
Cela produit une animation de 40 images du tracé. Il utilise le hook_plot_custom
pour inclure les tracés qui sont générés manuellement en animant le tracé 3D. Le code de l’animation était basé sur ceux de l’aide et de la source de play3d
et movie3d
. movied3d
lui-même ne peut pas être utilisé car il est trop rigide dans son nom de fichier.
Je l’ai mis sur github sur https://github.com/NikNakk/testAnimateRgl/ . Le pdf est à 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}
Edit: Nouvelle version
Voici une autre version qui illustre l'utilisation d'options de spin3d
personnalisées pour définir les parameters de spin3d
plus simple. Notez qu'avec cette version, le morceau n'est qu'une seule ligne (le scatter3d
). spin3d.axis
permet de définir le paramètre axis sur spin3d
; spin3d.rpm
est utilisé pour définir le paramètre rpm
. Le nombre d'images et l'intervalle entre les images sont définis à l'aide des fig.num
standard fig.num
et 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}