表格数据的一系列垂直条形图

表格数据的一系列垂直条形图

我正在尝试实现一些雄心勃勃的目标,但我被如何使用和来操作表格数据所pgfplots困扰pgfplotstable

我有一个数据文件,其中包含许多不同工具在一定数量的不同数据集中的基准测试结果。该文件具有以下格式:

datasets tool1 tool2 tool3 tool4 tool5 tool6
dataset1     1     2     3     4     5     6
dataset2     1     2     3     4     5     6
dataset3     1     2     3     4     5     6
dataset4     1     2     3     4     5     6
dataset5     1     2     3     4     5     6
dataset6     1     2     3     4     5     6
dataset7     1     2     3     4     5     6
dataset8     1     2     3     4     5     6

也就是说,工具放在不同的列上,数据集放在不同的行上。我想将这些数据绘制在相同形状的表格中,每行一个条形图,显示每行数据集上不同工具的计时。

因此,表格的第一列应报告数据集的名称,第二列应包含条形图。

我遇到的问题:

  • 如何迭代文件的行来生成表格?
    • 我可以想象用 进行迭代\foreach,但是在从文件的单个给定行获取条形图时遇到了问题。
  • 如何从每一行生成单个条形图?

我不知道如何模拟我的预期结果。它类似于例如,使用条形图代替雨图,并且不对第一列的行名称进行硬编码。

有什么建议吗?

答案1

如果你的文件被命名为例如mydata.csv,你可以使用

\pgfplotstabletranspose[colnames from=datasets,input colnames to=datasets]{\data}{mydata.csv}

示例 1:

\begin{filecontents*}{mydata.csv}
datasets tool1 tool2 tool3 tool4 tool5 tool6
dataset1     2     3     4     5     6     7
dataset2     1     2     3     4     5     6
dataset3     1     2     3     4     5     6
dataset4     1     2     3     4     5     6
dataset5     1     2     3     4     5     6
dataset6     1     2     3     4     5     6
dataset7     1     2     3     4     5     6
dataset8     1     2     3     4     5     6
\end{filecontents*}

\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.14}
\begin{document}
\pgfplotstabletranspose[colnames from=datasets,input colnames to=datasets]{\data}{mydata.csv}
  \foreach \dataset in {1,...,8}{%
    \noindent Dataset \dataset\qquad
    \begin{tikzpicture}[baseline={([yshift=-\baselineskip]p.north)}]
      \begin{axis}[
        height=4cm,
        width=\axisdefaultwidth,
        ybar,
        xtick=data,
        xticklabels from table={\data}{datasets},
        name=p
      ]
          \addplot table[x expr=\coordindex,y index=\dataset]{\data};
      \end{axis}
    \end{tikzpicture}%
    \par
  }%
\end{document}

在此处输入图片描述


示例 2:

\begin{filecontents*}{mydata.csv}
datasets tool1 tool2 tool3 tool4 tool5 tool6
dataset1     2     3     4     5     6     7
dataset2     1     2     3     4     5     6
dataset3     1     2     3     4     5     6
dataset4     1     2     3     4     5     6
dataset5     1     2     3     4     5     6
dataset6     1     2     3     4     5     6
dataset7     1     2     3     4     5     6
dataset8     1     2     3     4     5     6
\end{filecontents*}
\documentclass{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
  \pgfplotstabletranspose[colnames from=datasets,input colnames to=datasets]{\data}{mydata.csv}
  \begin{axis}[
    width=\textwidth,
    ybar,
    bar width=2pt,
    xtick=data,
    xticklabels from table={\data}{datasets},
    legend pos=north west,
    cycle list name=color list,
    every axis plot/.append style=fill
  ]
  \pgfplotsinvokeforeach {1,...,8}
    {
      \addplot table[x expr=\coordindex,y index=#1]{\data};
      \addlegendentry{dataset#1}
    }
  \end{axis}
\end{tikzpicture}
\end{document}

结果:

在此处输入图片描述

相关内容