我意识到这一定是一些非常基本的事情,但我很难弄清楚问题可能出在哪里。
在我看来,这三个\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
这里有几个问题。
\pgfmathresult
被层中的几乎所有操作使用pgfmath
,因此您只能在计算后立即使用它,否则它将被覆盖。使用 时
gnuplot
,表达式几乎不经过任何处理就传递给它,因此您必须使用gnuplot
语法和规则。6/100
是一个整数表达式,因此它将给出零。使用6.0/100
或类似技巧来强制浮点。您应该手动扩展宏前将它们传递给
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}