如何从 csv 文件中绘制以行作为图且以非数字列作为 x 轴的图形?

如何从 csv 文件中绘制以行作为图且以非数字列作为 x 轴的图形?

我有一个小的 csv 文件。文件中的每一行对应方法的一个结果,每一列对应方法的一个度量,例如:

\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents*}{mydata.csv}
Method, Mx,       My      , Mz 
A,      1,       1.2      , 0.7
B,      2,       0.8      , 0.8
C,      3,       0.9425   , 1.2
D,      4,       0.4794   , 1.1
E,      5,       1.4565   , 1.5
\end{filecontents*}

\begin{document}
\begin{tikzpicture}
\begin{axis}[]
\addplot table [col sep=comma] {mydata.csv};
\end{axis}
\end{tikzpicture}
\end{document}

我想为每种方法与每种测量绘制一个图。换句话说,我想绘制一个图,其 x 轴是测量值 Mx、My、Mz,y 轴是测量值。我想在同一张图中为每种方法 A、B、C、D 和 E 绘制这些图。

我使用各种问题研究了这个问题一段时间,但毫无进展。上面的示例显然在这种情况下不起作用,我不知道如何为此目的进行更改。

答案1

\pgfplotstabletranspose您可以使用包中的功能转置表格pgfplotstable

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\begin{filecontents*}{mydata.csv}
Method, Mx,       My      , Mz 
A,      1,       1.2      , 0.7
B,      2,       0.8      , 0.8
C,      3,       0.9425   , 1.2
D,      4,       0.4794   , 1.1
E,      5,       1.4565   , 1.5
\end{filecontents*}
\pgfplotstableread[col sep=comma]{mydata.csv}\Data
\pgfplotstabletranspose[colnames from=Method]\TransposedData\Data

\begin{document}
% if you want to see what the transposed table looks like
%\pgfplotstabletypeset[string type]{\TransposedData}

\begin{tikzpicture}
\begin{axis}[
  xtick=data,
  xticklabels from table={\TransposedData}{colnames}
  ]
\pgfplotsinvokeforeach{1,...,5}{
  % note x expr = \coordindex
  \addplot table[x expr=\coordindex,y index=#1] {\TransposedData};
  % the following to get the legend
  \pgfmathtruncatemacro{\tmpI}{#1-1}
  \pgfplotstablegetelem{\tmpI}{Method}\of\Data
  \addlegendentryexpanded{Method \pgfplotsretval}
}
\end{axis}
\end{tikzpicture}
\end{document}

相关内容