Serie de gráficos de barras verticales a partir de datos de tablas

Serie de gráficos de barras verticales a partir de datos de tablas

Estoy tratando de lograr algo un poco ambicioso y no sé cómo manipular los datos de la tabla con pgfplotsy pgfplotstable.

Tengo un archivo de datos con resultados comparativos de varias herramientas diferentes entre una cierta cantidad de conjuntos de datos diferentes. El archivo tiene esta forma:

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

es decir, las herramientas se colocan en columnas diferentes y los conjuntos de datos en filas diferentes. Me gustaría trazar estos datos en una especie de tabla de la misma forma, conun diagrama de barras para cada fila, que muestra los tiempos de diferentes herramientas en el conjunto de datos de cada fila.

Por lo tanto, la primera columna de la tabla debe informar los nombres de los conjuntos de datos y la segunda columna debe contener los diagramas de barras.

Los problemas que tengo:

  • ¿Cómo iterar sobre las filas del archivo para producir la tabla?
    • Me imagino iterando con \foreach, pero tengo problemas para obtener un diagrama de barras de una sola fila determinada del archivo.
  • ¿Cómo generar un diagrama de barras único a partir de cada fila?

No sé cómo burlarme del resultado previsto. es algo comoestePor ejemplo, con diagramas de barras en lugar de diagramas de lluvia y sin codificar los nombres de las filas en la primera columna.

¿Cualquier sugerencia?

Respuesta1

Si su archivo se llamaría, por ejemplo. mydata.csv, puedes usar

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

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

ingrese la descripción de la imagen aquí


Ejemplo 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:

ingrese la descripción de la imagen aquí

información relacionada