Knitr के साथ एनिमेटेड आरजीएल ग्राफ



animation rgl (1)

मैं .Rnw माध्यम से मेरे .Rnw दस्तावेज़ में एनिमेटेड rgl ग्राफ शामिल करना चाहता हूँ। यहां मेरा 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}

मुझे अपने बुने हुए दस्तावेजों में ग्राफ नहीं मिल रहा है। किसी भी तरह की सहायता की हम सराहना करेंगे। धन्यवाद

अपडेट किया गया

मैं अभी भी इसे काम करने और निम्नलिखित चेतावनी प्राप्त करने में असमर्थ हूं:

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 

मेरा sessionInfo() है

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  

संपादित

opts_chunk$set में opts_chunk$set fig.path = '' opts_chunk$set में fig.path = 'figure/' को fig.path = '' , दस्तावेज़ को png ग्राफ के साथ संकलित करता है लेकिन बिना किसी एनीमेशन के। अगर कुछ मुझे fig.path = 'figure/' साथ एनिमेटेड rgl ग्राफ कैसे प्राप्त करें, तो मुझे बहुत सराहना होगी। धन्यवाद


मुझे आपके आधार पर एक उदाहरण मिला है जो RStudio 0.99.441 के भीतर विंडोज 8.1 पर knitr का उपयोग कर काम करता है।

यह साजिश की 40-फ्रेम एनीमेशन उत्पन्न करता है। यह 3 डी प्लॉट को एनिमेट करके मैन्युअल रूप से जेनरेट किए गए प्लॉट्स को शामिल करने के लिए अंतर्निहित hook_plot_custom का उपयोग करता है। एनीमेशन के लिए कोड play3d और movie3d की मदद और स्रोत में उन लोगों पर आधारित था। movied3d उपयोग नहीं किया जा सकता है क्योंकि यह फ़ाइल फ़ाइल नामकरण में बहुत ही लचीला है।

मैंने इसे ggub पर https://github.com/NikNakk/testAnimateRgl/ पर रखा है। पीडीएफ 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}

संपादित करें: नया संस्करण

यहां एक और संस्करण है जो पैरामीटर को सरल spin3d लिए पैरामीटर सेट करने के लिए कस्टम खंड विकल्प का उपयोग प्रदर्शित करता है। ध्यान दें कि इस संस्करण के साथ, खंड केवल एक पंक्ति ( scatter3d प्लॉट) है। spin3d.axis का प्रयोग अक्ष पैरामीटर को spin3d पर सेट करने के लिए किया जाता है; spin3d.rpm का प्रयोग rpm पैरामीटर को सेट करने के लिए किया जाता है। छवियों और छवियों के बीच अंतराल की संख्या मानक fig.num और 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}




rnw