我如何从表的第一列读取第一个值,将其分配给变量,并在 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}