如何从表中读取值,分配给变量并在 x expr=\thisrow{} 中使用它

如何从表中读取值,分配给变量并在 x expr=\thisrow{} 中使用它

我如何从表的第一列读取第一个值,将其分配给变量,并在 x expr=\thisrow{} 的某个数学表达式中使用它?

代码应该是这样的,但在我的例子中,我手动输入了第一列的第一个值(在这个例子中是 3,如x expr=\thisrow{time}-3),我希望它能够自动完成。

更新:我的真实表格有 5 到 6 列和数千行。请在解决方案中考虑到这一点。

\documentclass{article}
\usepackage{pgfplots,tikz}
\usepackage{filecontents}

\begin{filecontents}{data.dat}
time speed
3 5
4 3
5 6
6 4
7 0
8 1
\end{filecontents}

\begin{document}

\begin{tikzpicture}
\begin{axis}[xlabel=time,ylabel=speed]
\addplot table[x expr=\thisrow{time}-3, y={speed}] {data.dat};
\end{axis}
\end{tikzpicture}

\end{document}

答案1

如果使用\addplot file而不是\addplot table,则不能使用x expr\thisrow或 列名,因为file需要非常简单的两列布局。在这种情况下,您可以使用 来x filter检查它当前是否正在处理第一个坐标,如果是,它将该值保存到全局宏中,然后从所有其他坐标中减去该值:

\documentclass{article}
\usepackage{pgfplots,tikz}
\usepackage{filecontents}

\begin{filecontents}{data.dat}
#time speed
3 5
4 3
5 6
6 4
7 0
8 1
\end{filecontents}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    xlabel=time,ylabel=speed,
    x filter/.code={
        \ifnum\coordindex=0
            \xdef\firstvalue{\pgfmathresult}
        \fi
        \pgfmathparse{\pgfmathresult-\firstvalue}
    }]
\addplot file {data.dat};
\end{axis}
\end{tikzpicture}

\end{document}

相关内容