Серия вертикальных столбчатых диаграмм на основе табличных данных

Серия вертикальных столбчатых диаграмм на основе табличных данных

Я пытаюсь достичь чего-то немного амбициозного и застрял на том, как манипулировать данными таблиц с помощью 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}

Результат:

введите описание изображения здесь

Связанный контент