使用列标题作为 x 刻度的标签

使用列标题作为 x 刻度的标签

使用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}

相关内容