LaTeX 中的面积图,但列数未知

LaTeX 中的面积图,但列数未知

我想绘制一个面积图,就像这个问题但是我想使用像这样的文件,其中列数未知:

Generation,Dog,Cat
0,100,4800
1,200,4700
2,100,4400
3,100,3800
4,100,2800

该文件也可能看起来像这样:

Generation,Dog,Cat,Elefant
0,100,4800,100
1,200,4700,100
2,100,4400,400
3,100,3800,1100
4,100,2800,2100

我该如何做呢?

我对 LaTeX 也还不太熟悉,所以请随意编辑我的问题和标签。

答案1

细节实施是一个个人喜好问题,但关键在于

  • 要找出数据文件中给定的列数\pgfplotstablegetcolsof
  • 将其存储在变量\pgfmathtruncatemacro
  • 然后使用“foreach”命令之一循环遍历文件,例如\pgfplotsinvokeforeach

因为你自己没有提供完整的 MWE,所以我使用了Zarko 的回答作为基础,并用我在这个答案

您还可以在以下答案中找到类似内容

希望这对您来说足以是一个好的开始。

% used PGFPlots v1.17
\begin{filecontents*}{data.csv}
date,backlog,wip,finished
2015-01-06,54,27,3
2015-01-13,55,27,5
2015-01-20,55,27,5
2015-01-27,54,27,8
2015-02-03,54,27,8
2015-02-10,56,27,10
2015-02-17,56,25,12
2015-02-24,63,24,17
2015-03-02,63,21,17
2015-03-09,59,23,20
2015-03-16,59,25,21
2015-03-23,55,27,26
2015-03-30,55,30,26
2015-04-06,62,28,30
2015-04-13,62,28,30
2015-04-20,65,22,40
2015-04-27,65,22,40
2015-05-04,61,22,44
2015-05-11,61,20,47
2015-05-18,60,21,50
2015-05-25,59,21,50
\end{filecontents*}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \usepgfplotslibrary{dateplot}
    \pgfplotsset{compat=1.17}
    % ----------------------------------------------------------------------
    \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}
                \closedcycle;
            \addlegendentryexpanded{\colname}
        }
    }
    % ----------------------------------------------------------------------
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        date coordinates in=x,
        xticklabel={\day.\month.\year},
        xticklabel style={
            rotate=90,
            anchor=near xticklabel,
        },
        xmin={2015-01-06},
        xmax={2015-05-25},
        ymin=0,
        ymax=140,
        max space between ticks=20,
        stack plots=y,
        area style,
    ]
        \plotfile{data.csv}
    \end{axis}
\end{tikzpicture}
\end{document}

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

相关内容