我有许多巨大的 csv 文件,需要一种简单的方法来绘制所有文件,而无需每次都定义标题等。
因此我发现了这个:https://tex.stackexchange.com/a/24023/95657
这正是我需要的,但它不适用于以逗号分隔的 csv 文件。
显示的数据显示不正确。
梅威瑟:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents}{testdata.dat}
,Distance,Velocity,Something
0,0,1,0.2
1,1,1,0.3
1.5,1.999,1,0.4
2,2,0,0.4
3,2,0,0.5
\end{filecontents}
\newcommand{\plotfile}[1]{
\pgfplotstableread[col sep=comma]{#1}{\table}
\pgfplotstablegetcolsof{#1}
\pgfmathtruncatemacro\numberofcols{\pgfplotsretval-1}
\pgfplotsinvokeforeach{1,...,\numberofcols}{
\pgfplotstablegetcolumnnamebyindex{##1}\of{\table}\to{\colname}
\addplot table [col sep=comma, y index=##1] {#1};
\addlegendentryexpanded{\colname}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[legend pos=north west]
\plotfile{testdata.dat}
\end{axis}
\end{tikzpicture}
\end{document}
我需要做什么才能让它工作?
答案1
导致错误的原因是,您还忘记添加col sep=comma
到\pgfplotsread
命令中了。(除此之外,我还对代码做了一些“优化”。)
% used PGFPlots v1.16
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents}{testdata.dat}
,Distance,Velocity,Something
0,0,1,0.2
1,1,1,0.3
1.5,1.999,1,0.4
2,2,0,0.4
3,2,0,0.5
\end{filecontents}
\newcommand{\plotfile}[1]{
\pgfplotstableread[col sep=comma]{#1}{\table}
\pgfplotstablegetcolsof{\table}
\pgfmathtruncatemacro\numberofcols{\pgfplotsretval-1}
\pgfplotsinvokeforeach{1,...,\numberofcols}{
\pgfplotstablegetcolumnnamebyindex{##1}\of{\table}\to{\colname}
\addplot table [y index=##1] {\table};
\addlegendentryexpanded{\colname}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\plotfile{testdata.dat}
\end{axis}
\end{tikzpicture}
\end{document}