我有一个小的 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}