在 pgfplots 设置中使用布尔表达式

在 pgfplots 设置中使用布尔表达式

如何在 pgfplots 设置中使用布尔表达式?我试图将每个其他图设置为forget plot,我可以使用下面示例中注释掉的行来执行此操作(如图所示),但是当我尝试通过\addplot各种方法仅使用一种方法完成此操作时(下面仅显示其中一种方法),我总是收到错误。

我确信我由于经验不足而遗漏了一些东西。这应该非常简单。

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
\pgfplotstableread{
x a a+1 b b+1 c c+1
0 0 1 4 5 5 6
2 1 2 3 4 5.5 6.5
}\loadedtable
\begin{axis}[
    cycle list={red, green, blue},
    every axis plot/.append style={very thick, mark=*},
    forget plot style={dotted, mark=none},
]

% \foreach \n in {6,5,...,1}{
\foreach \n [evaluate=\n as \ctrTF using \ifodd\n true \else false \fi] in {6,5,...,1}{
    \addplot table [x=x, y index=\n, forget plot/.expanded=\ctrlTF, ] {\loadedtable};
    \ifodd\n
        % \addplot table [x=x, y index=\n] {\loadedtable};
        \pgfplotstablegetcolumnnamebyindex{\n}\of{\loadedtable}\to\colname
        \addlegendentryexpanded{\colname}
    % \else
        % \addplot+[forget plot] table [x=x, y index=\n] {\loadedtable};
    \fi
}

\end{axis}

\end{tikzpicture}

\end{figure}

\end{document}

在此处输入图片描述

答案1

我找到了一个解决方案,即\foreach用以下内容替换循环。

\pgfplotsinvokeforeach{6,...,1}{
    \ifodd#1
        \def\toforget{false}
        \pgfplotstablegetcolumnnamebyindex{#1}\of{\loadedtable}\to\colname
        \addlegendentryexpanded{\colname}
    \else
        \def\toforget{true}
    \fi
    \addplot+ [forget plot=\toforget] table [x index=0, y index=#1] {\loadedtable};
}

相关内容