根据表的列名自动标记等值线

根据表的列名自动标记等值线

我希望我的代码使用列名(来自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}

相关内容