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
つまり、ツールは異なる列に配置され、データセットは異なる行に配置されます。このデータを同じ形の表のようなものにプロットし、各行の棒グラフ各行のデータセットにおけるさまざまなツールのタイミングを表示します。
したがって、表の最初の列にはデータセットの名前が報告され、2 番目の列には棒グラフが含まれます。
私が抱えている問題:
- ファイルの行を反復処理してテーブルを生成するにはどうすればよいでしょうか?
- を反復処理することは想像できます
\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}
結果: