如何在投影機框架上傳輸動畫 R 套件的輸出

如何在投影機框架上傳輸動畫 R 套件的輸出

我有來自套件的以下 R 代碼animation,它會產生一個隨機數,該隨機數字將一個接一個地產生的隨機數字加到R終端上的顯示上。

library("animation")
brownian.motion():
function(n=10,xlim=c(-20,20),ylim=c(-20,20))
{
  x=rnorm(n)
  y=rnorm(n)
  for (i in seq_len(ani.options("nmax"))) {
   dev.hold()
    plot(x,y,xlim = xlim,ylim = ylim)
    text(x,y)
    x=x+rnorm(n)
    y=y+rnorm(n)
  }
}

我希望這個 R 程式碼的結果位於投影機框架中,就像它顯示在R終端上一樣。

我嘗試了以下程式碼作為我的 MWE,但它不起作用

\documentclass{beamer}
\begin{document}
 \begin{frame}
%beginning of R code
library("animation")
brownian.motion():
function(n=10,xlim=c(-20,20),ylim=c(-20,20))
{
  x=rnorm(n)
  y=rnorm(n)
  for (i in seq_len(ani.options("nmax"))) {
   dev.hold()
    plot(x,y,xlim = xlim,ylim = ylim)
    text(x,y)
    x=x+rnorm(n)
    y=y+rnorm(n)
  }
}  
% end of R code
 \end{frame}
\end{document}

請幫幫我

答案1

我以前沒用過R。經過實驗、瀏覽手冊和上網詢問後的結論是:

不要使用animationR 包。它很複雜,沒有太多附加價值。

相反,為繪圖設定適當的輸出設備,例如pdf(...),它會產生向量圖形和多頁輸出。在 R 程式碼上運行後Rscript,將 PDF 輸出嵌入為動畫\animategraphics

點擊運行動畫(基於 Blink 的瀏覽器 [Chrome/Chromium、Opera] 以獲得最佳效能):

此外,問題中的原始 R 程式碼無法運行。這是一個工作範例,添加了一個簡單的模型,可以防止粒子移動超過限制。動畫幀寫入文件frames.pdf

在終端機中運作:

Rscript brnMotion.R

文件brnMotion.R

brownianMotion <-
function(n=10,xlim=c(-20,20),ylim=c(-20,20), steps=50)
{
  x=rnorm(n) # random starting position
  y=rnorm(n)
  for (i in 1:steps) {
    plot(x,y,xlim = xlim,ylim = ylim)
    text(x,y)

    # iterate over particles
    for(k in 1:n){
      walk=rnorm(2); # random move of particle

      x[k]=x[k]+walk[1] # new position
      y[k]=y[k]+walk[2]

      # simple model (at most two rebounds) that prevents a particle
      # from moving past the limits
      if(x[k]<xlim[1]) x[k]=2*xlim[1]-x[k]
      if(x[k]>xlim[2]) x[k]=2*xlim[2]-x[k]
      if(y[k]<ylim[1]) y[k]=2*ylim[1]-y[k]
      if(y[k]>ylim[2]) y[k]=2*ylim[2]-y[k]
    }
  }
}

pdf("frames.pdf")                # output device and file name
par(xaxs="i", yaxs="i", pty="s") # square plot region
par(mai=c(0.9,0.9,0.2,0.2))      # plot margins

brownianMotion(n=20, steps=400)  # 20 particles, 400 time steps

LaTeX 輸入(pdflatexlualatexxelatex):

\documentclass[aspectratio=169]{beamer}

\usepackage{animate}
\usepackage{graphicx}

\begin{document}

\begin{frame}{Brownian Motion}
  \begin{center}
  \animategraphics[width=0.5\linewidth,controls]{25}{frames}{}{}
  \end{center}
\end{frame}

\end{document}

答案2

這只是透過編寫程式碼來擴展@Alex 的出色答案,R以便pdf一步建立檔案。

要繼續,請建立一個文件,並將程式碼區塊R嵌入到該tex文件中。代碼塊由和R分隔。使用(R 無網路)副檔名儲存文件,例如.<<>>=@.RnwDaniel.Rnw

我選擇將動畫幀保存為png文件,因為我想上傳gif.該語法保存通過png("frames%d.png")調用的一系列文件。動畫幻燈片只是使用@Alex 的包以通常的方式製作的,它對文件進行分層以創建輸出。程式碼被封裝起來以將圖表顯示到投影片上。frame1.pngframe100.png\animategraphicsanimateframe1.pngframe100.pngpdfR\begin{frame} \end{frame}beamer

.Rnw使用pdflatexinRStudio或其他支援的編輯器knitr(例如 WinEdt 有一個用於此目的的插件) 編譯檔案。RStudio將執行R程式碼以產生一個.tex文件,該文件將運行程式碼的輸出RLaTeX程式碼整合在一起。

\documentclass{beamer}
\usepackage{animate}
\begin{document}

\begin{frame}
%beginning of R code
<<code,echo=FALSE,warning=FALSE,results='hide'>>=
brownianMotion <-
function(n=10,xlim=c(-20,20),ylim=c(-20,20), steps=50)
{
  x=rnorm(n)
  y=rnorm(n)
  for (i in 1:steps) {
    plot(x,y,xlim = xlim,ylim = ylim)
    text(x,y)

    # iterate over particles
    for(k in 1:n){
      walk=rnorm(2); # random move of particle

      x[k]=x[k]+walk[1] # new position
      y[k]=y[k]+walk[2]

      # simple model for preventing a particle from moving past the limits
      if(x[k]<xlim[1]) x[k]=xlim[1]
      if(x[k]>xlim[2]) x[k]=xlim[2]
      if(y[k]<ylim[1]) y[k]=ylim[1]
      if(y[k]>ylim[2]) y[k]=ylim[2]
    }
  }
}

png("frames%d.png")              # output device and file name
par(xaxs="i", yaxs="i", pty="s") # square plot region
par(mai=c(0.9,0.9,0.2,0.2))      # plot margins

brownianMotion(n=20, steps=100)  # 20 particles, 100 time steps
dev.off()
@
% end of R code
\begin{center}
\animategraphics[autoplay,controls,palindrome,height=0.7\textheight]{5}{frames}{1}{100}%
\end{center}
\end{frame}

\end{document}

在此輸入影像描述

答案3

我不知道“R”,但是當我在線嘗試時,您的程式碼(用於 r)導致了一些錯誤。網站提供了範例 r 程式碼。我編譯它以獲得一個 png 檔案作為輸出。我給它命名r.png並使用以下 LaTeX 程式碼在我的簡報中獲取該圖像。如果您想了解有關如何在 LaTeX 中添加圖像的更多信息,請閱讀graphicx文件。請參閱下面的範例。

\documentclass{beamer}
\usepackage{graphicx}

\begin{document}
    \begin{frame}{A graph}
        \centering
        \includegraphics[height=6cm,width=\textwidth]{r} % In the {} use the appropriate file name. (case-sensitive)
    \end{frame}
\end{document}

相關內容