使用 pgfplotsinvokeforeach 从 csv 表 (col sep=comma) 绘制图表

使用 pgfplotsinvokeforeach 从 csv 表 (col sep=comma) 绘制图表

我有许多巨大的 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}

该图显示了上述代码的结果

相关内容