我希望我的代码使用列名(来自pgfplotstable
)来自动标记行。
以下是 MWE:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\usepackage{filecontents}
\begin{filecontents}{data.txt}
T 1e5 2e5 3e5 4e5
100 1 1.5 2 2.5
200 2 2.5 3 3.5
300 3 3.5 4 4.5
400 4 4.5 5 5.5
\end{filecontents}
\pgfplotstableread{data.txt}{\DATA}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ylabel={T},
xlabel={Values}]
\pgfplotsforeachungrouped \i in {1,2,...,4} {
\pgfplotstablegetcolumnnamebyindex{\i}\of{\DATA}\to{\colname}
\addplot+ table [x index=\i, y={T}] {\DATA} node [pos = 0.85, sloped, fill = white] {P = \colname};
}
\end{axis}
\end{tikzpicture}
\end{document}
这里指示的压力总是相同的,但我想从表的列名中获取它。
结果相同
\pgfplotsinvokeforeach {1,2,...,4} {
\pgfplotstablegetcolumnnamebyindex{#1}\of{\DATA}\to{\colname}
\addplot+ table [x index=#1, y={T}] {\DATA} node [pos = 0.85, sloped, fill = white] {P = \colname};
}
答案1
根据我的理解(如果我错了,请纠正我),所有绘图命令都在 中进行评估\end{axis}
。因此, 的值\colname
是最后一列(在本例中)的值4e5
。为了获得正确的值,必须在每个循环中对其进行评估。请按照 中关于我用来进行评估的pgfplots manual, section 8.1
命令的讨论进行操作。请注意在和之前使用。将删除这些以提供以下字符序列和。由于之前没有,因此将通过 进行评估。\pgfplotsforeachungrouped
\edef
\colname
\noexpand
\addplot
\DATA
\edef
\noexpand
\addplot
\DATA
\noexpand
\colname
\edef
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\usepackage{filecontents}
\begin{filecontents}{data.txt}
T 1e5 2e5 3e5 4e5
100 1 1.5 2 2.5
200 2 2.5 3 3.5
300 3 3.5 4 4.5
400 4 4.5 5 5.5
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ylabel={T},
xlabel={Values}]
\pgfplotstableread{data.txt}{\DATA}
\pgfplotstablegetcolsof{\DATA}
\pgfmathtruncatemacro\numberofcols{\pgfplotsretval-1}
\pgfplotsinvokeforeach{1,...,\numberofcols}{
\pgfplotstablegetcolumnnamebyindex{#1}\of{\DATA}to{\colname}
\edef\letsdraw{\noexpand\addplot table [x index=#1, y={T}]
{\noexpand\DATA} node [pos = 0.85, sloped, fill = white]
{P=\colname};}
\letsdraw
}
\end{axis}
\end{tikzpicture}
\end{document}