Animieren Sie das pgfplot-Diagramm mit dem Animate-Paket

Animieren Sie das pgfplot-Diagramm mit dem Animate-Paket

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

Bildbeschreibung hier eingeben

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

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

Antwort1

Für das vorliegende Problem muss die Obergrenze des Plotbereichs 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}

Antwort2

Meine Lösung verwendengnuplotund muss (nur beim ersten Mal, um die Tabelle der Kurvenpunkte zu erhalten) mit kompiliert werden 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 man sehen kann, habe ich dem Tikz-Bild 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 verwende die folgende Anweisung in der Befehlszeile:

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

Wenn Sie kein Windows verwenden, lassen Sie die erstemagick

Das Ergebnis ist:

Bildbeschreibung hier eingeben

Bearbeiten: Wie AlexG sagt, ist der Hintergrund nicht notwendig, Sie können die Flagge -alpha removein verwenden convert. Daher lautet 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}

Wie zuvor 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:

Bildbeschreibung hier eingeben

verwandte Informationen