Reihe vertikaler Balkendiagramme aus Tabellendaten

Reihe vertikaler Balkendiagramme aus Tabellendaten

Ich versuche, ein etwas ehrgeizigeres Ziel zu erreichen, weiß aber nicht, wie ich die Tabellendaten mit pgfplotsund bearbeiten soll pgfplotstable.

Ich habe eine Datendatei mit Benchmark-Ergebnissen einer Reihe verschiedener Tools aus einer bestimmten Anzahl verschiedener Datensätze. Die Datei hat folgendes Format:

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

Das heißt, die Werkzeuge werden in verschiedenen Spalten und die Datensätze in verschiedenen Zeilen platziert. Ich möchte diese Daten in einer Art Tabelle mit der gleichen Form darstellen, mitein Balkendiagramm für jede Zeile, zeigt die Zeitabläufe verschiedener Werkzeuge im Datensatz jeder Zeile.

Daher sollte die erste Spalte der Tabelle die Namen der Datensätze enthalten und die zweite Spalte die Balkendiagramme.

Die Probleme, die ich habe:

  • Wie iteriert man über die Zeilen der Datei, um die Tabelle zu erstellen?
    • Ich kann mir vorstellen, mit zu iterieren \foreach, habe aber Probleme, aus einer einzelnen gegebenen Zeile der Datei ein Balkendiagramm zu erhalten.
  • Wie erstelle ich aus jeder einzelnen Zeile ein einzelnes Balkendiagramm?

Ich weiß nicht, wie ich mein beabsichtigtes Ergebnis verspotten soll. Es ist so etwas wieDasBeispiel mit Balkendiagrammen anstelle dieser Regendiagramme und ohne die Namen der Zeilen in der ersten Spalte fest zu codieren.

Irgendein Vorschlag?

Antwort1

Wenn Ihre Datei z. B. heißt mydata.csv, können Sie verwenden

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

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

Bildbeschreibung hier eingeben


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

Ergebnis:

Bildbeschreibung hier eingeben

verwandte Informationen