重新排列 pgfplotstable 中的数据

重新排列 pgfplotstable 中的数据

我有\pgfplotstable一个像这样的数据(从文件加载):

\pgfplotstableread{
  s       f
  0.0     95.9638
  0.2380665    160.565
  0.511     190.435
  0.705    270.435
  1.0         455.9638
}\data

我需要生成\pgfplotstable重新排列的行和列\data

\pgfplotstableread{
  s       f
  1.0         270.435
  0.705    190.435
  0.511     160.565
  0.2380665    95.9638
  0.0     <95.9638 or any other value>
}\customdata

行按相反顺序排列,并且第二列向上移动 1 个元素。

请问有什么建议吗?

答案1

您可以使用内置方法来反转顺序并创建包含移位值的新列,从而使此操作更简单一些:

\documentclass{article}   
\usepackage{pgfplotstable}
\usepackage{pgfplots}   
\begin{document}
\pgfplotstableread{
  s       f
  0.0     95.9638
  0.2380665    160.565
  0.511     190.435
  0.705    270.435
  1.0         455.9638
}\originaldata

\pgfplotstablegetcolumnnamebyindex{1}\of{\originaldata}\to{\secondcolumnname}

\pgfplotstablesort[sort cmp=float >]{\data}{\originaldata}

\pgfplotstableset{
    create on use/shifted/.style={
    create col/expr={\nextrow{\secondcolumnname}*1}}
}

\pgfplotstabletypeset{\originaldata}\hspace*{1cm}
\pgfplotstabletypeset[columns={[index]0,shifted},
    columns/shifted/.style={column name=\secondcolumnname}]\data

\begin{tikzpicture}
\begin{axis}
\addplot table {\originaldata};
\addplot table [y=shifted] {\data};
\end{axis}
\end{tikzpicture}
\end{document}

原始数据和移位数据的图

答案2

我做到了!

\pgfplotstablegetcolumnnamebyindex{0}\of{\data}\to{\firstcolumnname}
\pgfplotstablegetcolumnnamebyindex{1}\of{\data}\to{\secondcolumnname}

\pgfplotstablegetrowsof{\data}
\pgfmathsetmacro\ymax{\pgfmathresult - 1}

\pgfplotstablevertcat{\customdata}{\data};

\pgfplotstablemodifyeachcolumnelement\firstcolumnname\of\customdata\as\cell{
  \pgfmathsetmacro\newrow{\ymax - \pgfplotstablerow}
  \pgfplotstablegetelem{\newrow}{\firstcolumnname}\of\data
  \edef\cell{\pgfplotsretval}
}

\pgfplotstablemodifyeachcolumnelement\secondcolumnname\of\customdata\as\cell{
  \ifnum \pgfplotstablerow < \ymax
    \pgfmathsetmacro\filaant{\ymax - \pgfplotstablerow - 1}
    \pgfplotstablegetelem{\newrow}{\secondcolumnname}\of\data
    \edef\cell{\pgfplotsretval}
  \fi
}

相关内容