Série de gráficos de barras verticais de dados da tabela

Série de gráficos de barras verticais de dados da tabela

Estou tentando alcançar algo um pouco ambicioso e não sei como manipular dados de tabela com pgfplotse pgfplotstable.

Eu tenho um arquivo de dados com resultados de benchmark de várias ferramentas diferentes entre um certo número de conjuntos de dados diferentes. O arquivo tem este formato:

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

isto é, as ferramentas são colocadas em colunas diferentes e os conjuntos de dados em linhas diferentes. Eu gostaria de plotar esses dados em uma espécie de tabela do mesmo formato, comum gráfico de barras para cada linha, mostrando os tempos de diferentes ferramentas no conjunto de dados de cada linha.

Assim, a primeira coluna da tabela deve informar os nomes dos conjuntos de dados, e a segunda coluna deve conter os gráficos de barras.

Os problemas que tenho:

  • Como iterar nas linhas do arquivo para produzir a tabela?
    • Posso imaginar uma iteração com \foreach, mas tenho problemas para obter um gráfico de barras de uma única linha do arquivo.
  • Como gerar um gráfico de barras únicas de cada linha?

Não sei como zombar do resultado pretendido. É algo comoessepor exemplo, com gráficos de barras em vez dos gráficos de chuva e sem codificar os nomes das linhas na primeira coluna.

Alguma sugestão?

Responder1

Se o seu arquivo tiver o nome, por exemplo. mydata.csv, você pode usar

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

Exemplo 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}

insira a descrição da imagem aqui


Exemplo 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}

Resultado:

insira a descrição da imagem aqui

informação relacionada