
Ich habe den folgenden R-Code aus animation
einem Paket, das eine Zufallszahl generiert, die auf dem Terminaldisplay nacheinander generierte Zufallszahlen hinzufügt 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)
}
}
Ich möchte, dass das Ergebnis dieses R-Codes in einem Beamer-Frame angezeigt wird, genau wie es auf dem Terminal angezeigt wird R
.
Ich habe den folgenden Code als mein MWE ausprobiert, aber er hat nicht funktioniert
\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}
Bitte hilf mir
Antwort1
Ich habe R noch nie benutzt. Mein Fazit nach Experimenten, dem Durchblättern von Handbüchern und dem Nachfragen im Internet:
Verwenden Sie nicht das
animation
R-Paket. Es ist kompliziert und bietet keinen großen Mehrwert.
Legen Sie stattdessen ein geeignetes Ausgabegerät für Diagramme fest, z. B. pdf(...)
, das Vektorgrafiken und mehrseitige Ausgaben erzeugt. Rscript
Betten Sie die PDF-Ausgabe nach der Ausführung des R-Codes mit als Animation ein \animategraphics
.
Klicken Sie, um die Animation auszuführen (Blink-basierte Browser [Chrome/Chromium, Opera] für optimale Leistung):
Außerdem läuft der ursprüngliche R-Code in der Frage nicht. Hier ist ein funktionierendes Beispiel mit einem einfachen Modell, das verhindert, dass Partikel über die Grenzen hinausgehen. Animationsbilder werden in eine Datei geschriebenframes.pdf
In einem Terminal ausführen:
Rscript brnMotion.R
Datei 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-Eingabe ( pdflatex
, lualatex
oder 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}
Antwort2
Dies erweitert lediglich die hervorragende Antwort von @Alex, indem der R
Code so verknüpft wird, dass die pdf
Datei in einem Schritt erstellt wird.
Um fortzufahren, erstellen Sie eine Datei mit den R
darin eingebetteten Codeblöcken tex
. R
Codeblöcke werden durch <<>>=
und abgegrenzt @
. Speichern Sie die Datei mit der .Rnw
Erweiterung (R kein Web), beispielsweise Daniel.Rnw
.
Ich habe mich entschieden, die Animationsframes als png
Dateien zu speichern, weil ich sie hochladen wollte gif
. Die Syntax png("frames%d.png")
speichert eine Sequenz von Dateien, die frame1.png
durch genannt werden frame100.png
. Die animierte Folie wird einfach auf die übliche Weise erstellt, indem das Paket \animategraphics
von @Alex verwendet wird, das die durch Dateien animate
schichtet, um die Ausgabe zu erstellen. Der Code wird in verpackt, um die Grafiken auf eine Folie zu bringen .frame1.png
frame100.png
pdf
R
\begin{frame} \end{frame}
beamer
Kompilieren Sie die .Rnw
Datei mit pdflatex
in RStudio
oder einem anderen Editor, der dies unterstützt knitr
(z. B. verfügt WinEdt über ein Add-In für diesen Zweck). RStudio
führt den R
Code aus, um eine Datei zu erstellen , die die Ausgabe aus der Ausführung des Codes mit dem Code .tex
integriert .R
LaTeX
\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}
Antwort3
Ich kenne „R“ nicht, aber Ihr Code (für r) hat einige Fehler verursacht, als ich ihn online ausprobiert habe.DasDie Site bietet einen Beispiel-R-Code. Ich habe ihn kompiliert, um eine PNG-Datei als Ausgabe zu erhalten. Ich habe ihn benannt r.png
und den folgenden LaTeX-Code verwendet, um dieses Bild in meine Präsentation einzufügen. Wenn Sie mehr darüber erfahren möchten, wie Sie Bilder in LaTeX hinzufügen, lesen Sie bitte die graphicx
Dokumentation. Siehe das Beispiel unten.
\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}