使用 animate 包制作 pgfplot 动画图形

使用 animate 包制作 pgfplot 动画图形

在谷歌搜索如何制作动画情节后,我发现了不同的方法,但我不明白,在使用此方法之前,我已经制作了一些动画方法。我的问题是是否可以使用相同的方法为以下情节制作动画?

在此处输入图片描述

(我几天内就需要这个动画,所以我无法学习其他方法)

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

答案1

对于当前的问题,绘图域的上限需要进行动画处理。

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

答案2

我的解决方案使用gnuplot并且必须使用 进行编译(仅限第一次获取曲线点的表)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}

可以看出,我为 tikzpicture 添加了背景,因为我发现以这种方式转换为 GIF 效果更好(锯齿更少)。编译 LaTeX 代码后,您必须使用将多页 PDF 转换为 GIF ImageMagick。我在命令行中使用以下指令:

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

如果你不使用 Windows,请省略初始magick

结果是:

在此处输入图片描述

编辑: 正如 AlexG 所说,背景不是必需的,您可以使用-alpha remove中的标志convert。因此,改进的代码(带有一些其他更改)是:

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

与之前一样,必须使用以下命令进行编译pdflatex.exe -shell-escape %.tex以获取多页 PDF,然后使用:

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

结果是:

在此处输入图片描述

相关内容