테이블 데이터의 일련의 세로 막대 그래프

테이블 데이터의 일련의 세로 막대 그래프

저는 약간 야심 찬 목표를 달성하려고 노력 중이며 및 를 사용하여 테이블 데이터를 조작하는 방법에 갇혀 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}

결과:

여기에 이미지 설명을 입력하세요

관련 정보