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