使用pgfplots
,可以让xticklabels
给出表格的一列。但是,是否可以从表头导入它?
在我的具体案例中,我有一个包含两列“速度”和“速率”的表格。理想情况下,应该从表头读取它们,而不是像 那样明确地写出来yticklabels={speed,distance}
。
\documentclass{article}
\usepackage{pgfplots,filecontents}
\pgfplotsset{compat=1.9}
\usepgfplotslibrary{statistics}
\begin{filecontents}{test.dat}
speed distance
1 3
20 10
2 3
3 4
5 6
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ytick={1,2},yticklabels={speed,distance}]
\pgfplotstablegetcolsof{test.dat}\pgfmathsetmacro\numberofycols{\pgfplotsretval-1}
\pgfplotsinvokeforeach {0,...,\numberofycols}{
\addplot+[boxplot] table[y index=#1] {test.dat};
}
\end{axis}
\end{tikzpicture}
\end{document}
答案1
您可以定义一种新样式,循环遍历指定表的列,将列名写入列表,然后使用该列表设置 y 刻度标签:
\pgfplotsset{
yticklabels from column names/.code={
\pgfplotstableread{#1}\loadedtable
\def\columnnamelist{}
\pgfplotstableforeachcolumn\loadedtable\as\col{%
\edef\columnnamelist{\columnnamelist\col,}
}
\pgfplotsset{yticklabels/.expand once=\columnnamelist}
}
}
\documentclass{article}
\usepackage{pgfplots,filecontents}
\pgfplotsset{compat=1.9}
\usepgfplotslibrary{statistics}
\begin{filecontents}{test.dat}
speed distance
1 3
20 10
2 3
3 4
5 6
\end{filecontents}
\pgfplotsset{
yticklabels from column names/.code={
\pgfplotstableread{#1}\loadedtable
\def\columnnamelist{}
\pgfplotstableforeachcolumn\loadedtable\as\col{%
\edef\columnnamelist{\columnnamelist\col,}
}
\pgfplotsset{yticklabels/.expand once=\columnnamelist}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ytick={1,2}, yticklabels from column names=test.dat]
\pgfplotstablegetcolsof{test.dat}\pgfmathsetmacro\numberofycols{\pgfplotsretval-1}
\pgfplotsinvokeforeach {0,...,\numberofycols}{
\addplot+[boxplot] table[y index=#1] {test.dat};
}
\end{axis}
\end{tikzpicture}
\end{document}