Animieren Sie das pgfplot-Diagramm mit dem Animationspaket

Sep 19 2020

Nachdem ich gegoogelt hatte, wie man eine Handlung animiert, fand ich verschiedene Möglichkeiten, die ich nicht bekam. Ich habe einige Animationen gemacht, bevor ich diese Methode verwendete . Meine Frage ist, ob es möglich ist, die folgende Methode mit derselben Methode zu animieren?

(Ich brauche diese Animation in ein paar Tagen, damit ich keine anderen Methoden lernen kann.)

\documentclass[tikz]{standalone}
\usetikzlibrary{animations}
\usepackage{animate}
\usepackage{ifthen}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{document}

\foreach \x in {0,1,...,20} {
\begin{tikzpicture}
\useasboundingbox (-3,-5) rectangle (9,10);
\begin{axis}[%title={test},
             legend style={font=\fontsize{3}{3}\selectfont},
             legend pos=south east,
             axis lines=center,
             domain=0.2:8,
             xtick={0,1,...,7},
             ytick={0,1,...,4},
             samples=501,
             xlabel={}]
\addplot [gray, dashed] {1};

\addplot [color=red] {1-exp(-\x)*cos(3*deg(\x))};

\end{axis}
\end{tikzpicture}
}
\end{document}

Antworten

1 AlexG Sep 20 2020 at 06:44

Für das vorliegende Problem muss die Obergrenze der Plotdomäne animiert werden.

\documentclass{standalone}
%\documentclass[dvisvgm]{standalone} % latex <file>.tex ; dvisvgm --font-format=woff2 --zoom=-1  --exact <file>.dvi 

\usepackage[T1]{fontenc}
\usepackage{animate}
\usepackage{pgfplots}

\begin{document}

\begin{animateinline}[controls]{20}
\multiframe{81}{rXmax=0+0.1}{
  \begin{tikzpicture}
  \begin{axis}[
    axis lines=center,
    domain=0.001:\rXmax,
    xtick={0,1,...,8},
    xmax=8.4,
    ymax=1.6,
    samples=501
  ]
  \addplot [gray, dashed] {1};
  
  \addplot [color=red] {1-exp(-x)*cos(3*deg(x))};
  
  \end{axis}
  \end{tikzpicture}
}
\end{animateinline}

\end{document}
1 vipa Sep 20 2020 at 09:08

Meine Lösung verwendet gnuplotund muss kompiliert werden (nur beim ersten Mal, um die Tabelle der Punkte der Kurve zu erhalten) mit pdflatex.exe -shell-escape %.tex.

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usetikzlibrary{math,backgrounds}
\begin{document}

\foreach \xDom in {0.2,0.3,...,7.2} {
\begin{tikzpicture}[background rectangle/.style={fill=white},show background rectangle]
\tikzmath{
\samplePoints= int(\xDom*100);
\idFile= int(\xDom*10);
}
\begin{axis}[%title={test},
             legend style={font=\fontsize{3}{3}\selectfont},
             legend pos=south east,
             axis lines=center,
             domain=0.2:\xDom,
             xmin=0.2,xmax=7.5,
             ymin={1-exp(-0.2)*cos(3*deg(0.2))},
             ymax=1.5,
             xtick={0,1,...,7},
             ytick={0,1,...,4},
             samples=\samplePoints,
             xlabel={}]
\draw[gray, dashed] (axis cs:0,1) -- (axis cs:7.2,1);

\addplot [color=red] gnuplot[id=gr\idFile] {1-exp(-x)*cos(3*x)};

\end{axis}
\end{tikzpicture}
}
\end{document}

Wie zu sehen ist, habe ich dem Tikzpicture einen Hintergrund hinzugefügt, da ich festgestellt habe, dass die Konvertierung in GIF auf diese Weise viel besser ist (weniger Aliasing). Nach der Kompilierung des LaTeX-Codes müssen Sie das mehrseitige PDF mit in GIF konvertieren ImageMagick. Ich benutze die folgende Anweisung in der Kommandozeile:

magick convert -verbose -density 300 -strip -resize 50% -layers OptimizePlus -delay 30 *.pdf myGIF.gif

Wenn Sie Windows nicht verwenden, lassen Sie die Initiale weg magick

Das Ergebnis ist:

Bearbeiten: Da AlexG sagt, dass der Hintergrund nicht erforderlich ist, können Sie das Flag -alpha removein verwenden convert. Daher ist ein verbesserter Code (mit einigen anderen Änderungen):

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usetikzlibrary{math}
\begin{document}

\foreach \xDom [count=\idFile] in {0.2,0.21,...,7.2} {
\begin{tikzpicture}
\tikzmath{
\samplePoints= ifthenelse(\xDom==0.2, 1, int(\xDom*100));
}
\begin{axis}[%title={test},
             legend style={font=\fontsize{3}{3}\selectfont},
             legend pos=south east,
             axis lines=center,
             domain=0.2:\xDom,
             xmin=0.2,xmax=7.5,
             ymin={1-exp(-0.2)*cos(3*deg(0.2))},
             ymax=1.5,
             xtick={0,1,...,7},
             ytick={0,1,...,4},
             samples=\samplePoints,
             xlabel={}]
\draw[gray, dashed] (axis cs:0,1) -- (axis cs:7.2,1);

\addplot [color=red] gnuplot[id=gr\idFile] {1-exp(-x)*cos(3*x)};

\end{axis}
\end{tikzpicture}
}
\end{document}

Nach wie vor muss dies kompiliert werden, pdflatex.exe -shell-escape %.texum das mehrseitige PDF zu erhalten und dann mit:

magick convert -verbose -density 300 -strip -resize 40% -alpha remove -layers OptimizePlus -delay 1 *.pdf myGif.gif

Und das Ergebnis ist: