从另一个 pgfplotstable 中的数据创建自定义 pgfplotstable

从另一个 pgfplotstable 中的数据创建自定义 pgfplotstable

我有一个 pgfplotstable,其中包含点的坐标,例如

\pgfplotstableread{
    t x
    0.0 0.0
    1.0 2.0
    3.0 5.0
    6.0 10.0
    11.0 12.0
}\points

我想创建另一个表格,其中包含第二点和第四点周围的斜率。我使用以下代码来计算斜率:

\foreach \j in {1,3} {% using foreach because in reality I am using a very large table
    \pgfmathsetmacro{\jb}{\j + 1}% The index of the previous point
    \pgfmathsetmacro{\ja}{\j - 1}% The index of the next point
    

    \pgfplotstablegetelem{\j}{t}\of\loadedtable% The value of t in the current point
    \pgfmathsetmacro{\t}{\pgfplotsretval}% Set the value of t in the variable \t

    \pgfplotstablegetelem{\ja}{t}\of\loadedtable% The value of t of the previous point
    \pgfmathsetmacro{\ta}{\pgfplotsretval}% Set the value in the variable \ta
    \pgfplotstablegetelem{\ja}{x}\of\loadedtable% The value of x of the previous point
    \pgfmathsetmacro{\xa}{\pgfplotsretval}% Set the value in the variable \xa
    
    % Doing the same thing for the next point
    \pgfplotstablegetelem{\jb}{t}\of\loadedtable%
    \pgfmathsetmacro{\tb}{\pgfplotsretval}%
    \pgfplotstablegetelem{\jb}{x}\of\loadedtable%
    \pgfmathsetmacro{\xb}{\pgfplotsretval}%
    
    % Computing the slope
    \pgfmathsetmacro{\v}{(\xb - \xa)/(\tb - \ta)}%
}

但是它效果不是很好,我不知道如何使用它来创建一个带有斜率的新表。我的目标是找到一种方法将 t(时间)和 v(斜率)的值存储在新表中。有人能帮我正确地做到这一点吗?

答案1

做起来容易,但想清楚怎么做却很难。

顺便说一句,您实际上并不需要新表,因为您可以选择要使用/打印的列。

\documentclass{article}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
    t x
    0.0 0.0
    1.0 2.0
    3.0 5.0
    6.0 10.0
    11.0 12.0
}\points

\pgfplotstableset{create on use/v/.style=
  {create col/expr={(\thisrow{x}-\prevrow{x})/(\thisrow{t}-\prevrow{t})}}}
  
\pgfplotstabletypeset[columns={t,x,v}]\points

\end{document}

相关内容