在 tikz pgfplot 函数中执行数学运算

在 tikz pgfplot 函数中执行数学运算

我意识到这一定是一些非常基本的事情,但我很难弄清楚问题可能出在哪里。

在我看来,这三个\addplot应该相同。但是,只有第一个按预期工作(这是一个问题,因为我需要它来执行计算。

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{document}

\begin{tikzpicture}
  \pgfmathparse{1+(6/100)}
  \begin{axis}[
    xtick distance=5,
    minor x tick num=4
  ]
    \addplot[smooth,green,domain=0:25] gnuplot [id=plot3] {155*1.06**x}; % works
    \addplot[smooth,green,domain=0:25] gnuplot [id=plot2] {155*(1+(6/100))**x)}; % makes dumb flat line
    \addplot[smooth,green,domain=0:25] gnuplot [id=plot4] {155*\pgfmathresult**x}; % makes some sort of weird parobalic nonsense?
  \end{axis}
\end{tikzpicture}

\end{document}

我知道我没有很好地解释我的问题,所以请毫不犹豫地指示我重新措辞或解释一些事情。

答案1

这里有几个问题。

  1. \pgfmathresult被层中的几乎所有操作使用pgfmath,因此您只能在计算后立即使用它,否则它将被覆盖。

  2. 使用 时gnuplot,表达式几乎不经过任何处理就传递给它,因此您必须使用gnuplot语法和规则。6/100是一个整数表达式,因此它将给出零。使用6.0/100或类似技巧来强制浮点。

  3. 您应该手动扩展宏将它们传递给gnuplot

\documentclass[tikz, margin=2.72mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{document}

\begin{tikzpicture}
    \newcommand{\myk}{(1+(6.0/100))}
    \begin{axis}[
        xtick distance=5,
        minor x tick num=4
        ]
        \addplot[green,domain=0:25] gnuplot [id=plot3] {155*1.06**x}; % works
        \addplot[smooth,red,dashed,domain=0:25] gnuplot [id=plot2] {155*(1+(6./100))**x}; % makes dumb flat line
        % this trick will "prepare" an expanded "addplot" command into \tmp
        % and then we'll call it. 
        \edef\tmp{\noexpand\addplot[smooth,blue,densely dotted,domain=0:25] gnuplot [id=plot4] {155*(\myk**x)}}
        \tmp;
        \end{axis}
    \end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容