在 pgfplots 中添加 \foreach 变量

在 pgfplots 中添加 \foreach 变量

如何使用 y expr 对表格中的多列求和,同时使用 \foreach

我希望这样的事情能够起作用,但显然它需要某种我无法工作的表达式评估:

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

\begin{document}
\begin{tikzpicture}
\begin{axis}
    \foreach \y in {1,3,5,7}
        \addplot table[x=Foo, y expr={\thisrowno{\y} + \thisrowno{\y+1}}] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}

数据:

Foo John John_a Paul Paul_a George George_a Ringo Ringo_a
1 0.0 37.0 0.00 9.00 0.0 4.0 0.0 12.80
2 16.0 5.0 4.0 1.0 0.6 2.80 0.0 12.80
4 8.0 5.0 2.0 1.0 0.3 2.8 0.0 12.80
8 4.0 5.0 1.0 1.0 0.4 2.8 0.0 12.80
16 2.0 5.0 1.2 1.0 0.4 2.8 0.0 12.80
32 1.0 5.0 1.3 1.0 0.5 2.8 0.0 12.80

答案1

作为 Jake 解决方案的替代,您可以使用\foreachevaluate密钥,如下所示。

在此处输入图片描述

\documentclass{article}
\usepackage{filecontents}

\begin{filecontents*}{data.csv}
Foo John John_a Paul Paul_a George George_a Ringo Ringo_a
1 0.0 37.0 0.00 9.00 0.0 4.0 0.0 12.80
2 16.0 5.0 4.0 1.0 0.6 2.80 0.0 12.80
4 8.0 5.0 2.0 1.0 0.3 2.8 0.0 12.80
8 4.0 5.0 1.0 1.0 0.4 2.8 0.0 12.80
16 2.0 5.0 1.2 1.0 0.4 2.8 0.0 12.80
32 1.0 5.0 1.3 1.0 0.5 2.8 0.0 12.80
\end{filecontents*}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}
\begin{tikzpicture}
\begin{axis}
    \foreach[evaluate=\y as \ynext using int(\y+1)] \y in {1,3,5,7}
        \addplot table[x=Foo, y expr={\thisrowno{\y}+\thisrowno{\ynext}}] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}

答案2

axis环境中,您需要使用\pgfplotsinvokeforeach而不是正常的\foreach

请注意,您需要\y+1明确评估总和(在您的示例中),例如使用\the\numexpr

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

\usepackage{filecontents}

\begin{filecontents}{data.csv}
Foo John John_a Paul Paul_a George George_a Ringo Ringo_a
1 0.0 37.0 0.00 9.00 0.0 4.0 0.0 12.80
2 16.0 5.0 4.0 1.0 0.6 2.80 0.0 12.80
4 8.0 5.0 2.0 1.0 0.3 2.8 0.0 12.80
8 4.0 5.0 1.0 1.0 0.4 2.8 0.0 12.80
16 2.0 5.0 1.2 1.0 0.4 2.8 0.0 12.80
32 1.0 5.0 1.3 1.0 0.5 2.8 0.0 12.80     
\end{filecontents}

\begin{document}
\begin{tikzpicture}
\begin{axis}
    \pgfplotsinvokeforeach{1,3,5,7}{
        \addplot table[x=Foo, y expr={\thisrowno{#1} + \thisrowno{\the\numexpr #1+1}}] {data.csv};
        }
\end{axis}
\end{tikzpicture}
\end{document}

相关内容