如何在 Beamer 框架上传输动画 R 包的输出

如何在 Beamer 框架上传输动画 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 代码的结果出现在 beamer 框架中,就像它显示在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(...),它会产生矢量图形和多页输出。在RscriptR 代码上运行后,使用将 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 no web) 扩展名保存文件,例如<<>>=@.RnwDaniel.Rnw,例如。

我选择将动画帧保存为png文件,因为我想上传gif。语法png("frames%d.png")保存了一系列文件,称为frame1.png通过frame100.png。动画幻灯片只是以通常的方式使用\animategraphics@Alex的包制作的,它将通过文件animate分层以创建输出。代码被包装在以将图表放到frame1.pngframe100.pngpdfR\begin{frame} \end{frame}beamer幻灯片上。

使用或其他支持的编辑器编译.Rnw文件(例如 WinEdt 有一个用于此目的的插件)。 将执行代码以生成一个文件,该文件将运行代码的输出与代码集成在一起。pdflatexRStudioknitrRStudioR.texRLaTeX

\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}

相关内容