
Tengo el siguiente código R del animation
paquete que genera un número aleatorio que agrega números aleatorios generados uno tras otro en la pantalla del R
terminal.
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)
}
}
Quiero que el resultado de este código R esté en un marco de proyector tal como se muestra en R
la terminal.
Probé el siguiente código como mi MWE pero no funcionó
\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}
Por favor, ayúdame
Respuesta1
No he usado R antes. Mi conclusión después de experimentar, hojear manuales y preguntar en Internet:
No utilice el
animation
paquete R. Es complicado sin mucho valor añadido.
En su lugar, configure un dispositivo de salida apropiado para los gráficos, como pdf(...)
, que produce gráficos vectoriales y resultados de varias páginas. Después de ejecutar Rscript
el código R, incruste la salida PDF como animación con \animategraphics
.
Haga clic para ejecutar la animación (navegadores basados en Blink [Chrome/Chromium, Opera] para obtener el mejor rendimiento):
Además, el código R original de la pregunta no se ejecuta. A continuación se muestra un ejemplo práctico, con un modelo simple agregado que evita que las partículas superen los límites. Los fotogramas de animación se escriben en un archivo.frames.pdf
Ejecutar en una terminal:
Rscript brnMotion.R
Archivo 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
Entrada LaTeX ( pdflatex
, lualatex
o xelatex
):
\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}
Respuesta2
Esto simplemente extiende la excelente respuesta de @Alex al tejer el R
código para que el pdf
archivo se cree en un solo paso.
Para continuar, cree un archivo con los fragmentos de R
código incrustados en él tex
. R
Los fragmentos de código están delimitados por <<>>=
y @
. Guarde el archivo con una .Rnw
extensión (R no web), por ejemplo Daniel.Rnw
.
Elegí guardar los cuadros de animación como png
archivos porque quería cargar el archivo gif
. La sintaxis png("frames%d.png")
guarda una secuencia de archivos llamados frame1.png
mediante frame100.png
. La diapositiva animada se crea de la forma habitual utilizando \animategraphics
el paquete de @Alex animate
, que superpone los frame1.png
archivos frame100.png
para crear el pdf
resultado. El R
código está empaquetado \begin{frame} \end{frame}
para colocar los gráficos en una beamer
diapositiva.
Compile el .Rnw
archivo con pdflatex
in RStudio
u otro editor que lo admita knitr
(por ejemplo, WinEdt tiene un complemento para este propósito). RStudio
ejecutará el R
código para producir un .tex
archivo que integre el resultado de ejecutar el R
código con el LaTeX
código.
\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}
Respuesta3
No conozco 'R', pero su código (para r) generó algunos errores cuando lo probé en línea.EsteEl sitio proporciona un código R de muestra. Lo compilé para obtener un archivo png como resultado. Le puse un nombre r.png
y utilicé el siguiente código LaTeX para obtener esa imagen en mi presentación. Si desea leer más sobre cómo agregar imágenes en LaTeX, lea graphicx
la documentación. Vea el ejemplo a continuación.
\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}