pgfplotsinvokeforeach 循环内的条件

pgfplotsinvokeforeach 循环内的条件

我用它\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)。因此请记住,数值准确性并不那么可靠。

在此处输入图片描述

相关内容