我用它\pgfplotsinvokeforeach
来在选项中进行数学计算\addplot
。现在我需要一个条件来根据循环的当前索引决定是否绘制一条线,但我无法通过命令来做到这一点\ifthenelse
。这只是一个“伪”示例:
\documentclass{standalone}
\usepackage{ifthen}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\pgfplotsinvokeforeach {0.1,0.2,...,2}
{\ifthenelse{#1<1}{\addplot {0};}{"do nothing"}}
\end{axis}
\end{tikzpicture}
\end{document}
我收到“缺少=”和“缺少数字”错误。
最初(误导性)发布的代码是:
\documentclass{standalone}
\usepackage{ifthen}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\pgfplotsinvokeforeach {0,...5}
{\ifthenelse{#1<3}{\addplot {0};}{\addplot {1};}}
\end{axis}
\end{tikzpicture}
\end{document}
谢谢
答案1
正如 egreg 发现的,坐标列表缺少一个逗号。此外,您还可以使用 PGFifthenelse
来完成您的任务。
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\pgfplotsinvokeforeach {0,...,5}
{
\pgfmathparse{ifthenelse(#1<3,0,1)}
\addplot coordinates {(#1,\pgfmathresult)};
}
\end{axis}
\end{tikzpicture}
\end{document}
另一种可能性是使用以下内容进行条件绘图
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\pgfplotsinvokeforeach {0.1,0.2,...,1}
{
\pgfmathparse{( #1 < 0.5 ? int(1) : int(0))}
\ifnum\pgfmathresult>0
\addplot{#1};
\else
\fi
}
\end{axis}
\end{tikzpicture}
\end{document}
注意如何0.5
从 if 子句中溜走(仅在之后被捕获x<0.499975
)。因此请记住,数值准确性并不那么可靠。