在 pgfplots 中对数据进行分组

在 pgfplots 中对数据进行分组

我有一个文件,其中包含不同设置(组)的测量结果,保存在一个 csv 文件中,如下所示。我想在 pgfplots 中为每个组绘制一条线并提供适当的图例。有没有办法自动执行下面显示的过程?也就是说,自动识别数据中存在哪些组并为每个组添加一条线和一个图例条目。

\documentclass{minimal}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents*}{data.csv}
group, x,  y 
1.10,  1,  3.5
1.10,  2,  2.2
1.10,  3,  2.1
1.10,  4,  1.5
2.12,  1,  4
2.12,  2,  3
2.12,  3,  2
2.12,  4,  1
3.21,  1,  2
3.21,  2,  2.2
3.21,  3,  2.4
3.21,  4,  2.6
\end{filecontents*}


\begin{document}
\begin{tikzpicture}

\pgfplotsset{
    discard if not/.style 2 args={
        x filter/.code={
            \edef\tempa{\thisrow{#1}}
            \edef\tempb{#2}
            \ifx\tempa\tempb
            \else
                \def\pgfmathresult{inf}
            \fi
        }
    }
}

\begin{axis}
\addplot table [discard if not={group}{1.10}, x=x, y=y, col sep=comma] {data.csv};
\addplot table [discard if not={group}{2.12}, x=x, y=y, col sep=comma] {data.csv};
\addplot table [discard if not={group}{3.21}, x=x, y=y, col sep=comma] {data.csv};
\legend{1,2,3}
\end{axis}
\end{tikzpicture}
\end{document}

平均能量损失

答案1

也许是\foreach

\begin{document}
    \begin{tikzpicture}
        \begin{axis}
            \foreach\g in{1.10,2.12,3.21}{
                \addplot table [discard if not={group}{\g}, x=x, y=y, col sep=comma] {data.csv};
            }
            \legend{1,2,3}
        \end{axis}
    \end{tikzpicture}
\end{document}

相关内容