从 pgfplotstable 宏中删除行

从 pgfplotstable 宏中删除行

我已经将一些数据存储在 pgfplotstable 宏中。我想从该宏中删除一行(缺少一些数据的行),然后进一步处理剩余数据(进行一些计算),然后再使用 pgfplots 绘制它。我认为如果我可以创建一个包含所有原始数据的新宏,省略缺少数据的行,那么这种方法会有效。这可能吗?或者有更好的方法吗?这是我所处情况的简化版本。在这种情况下,我想删除该行2,2,,。可能有多行缺少数据,但我不一定确切知道它们是什么。

\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotstableread[col sep=comma]{
  a,b,c,d
  1,1,1,1
  2,2,,
  3,3,3,3
}\data
\begin{document}
\pgfplotstabletypeset{\data}
\begin{tikzpicture}
  \begin{axis}
    \addplot table [x=a,y=b]{\data};
  \end{axis}
\end{tikzpicture}
\end{document}

答案1

提供的答案和代码这里似乎满足了我的需要。

以下是一个示例文件:

\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable,pgfplotstablefilter}
\pgfplotstableread[col sep=comma]{
  a,b,c,d
  1,1,1,1
  2,2,,
  3,3,3,3
  4,4,4,4
  5,5,,
}\data
\begin{document}
\pgfkeys{/pgfplots/table/col sep=comma}
\pgfplotstabletypeset{\data}
\pgfplotstablefilter[c unequal {}]{\data}{\newdata}
\pgfplotstabletypeset{\newdata}
\begin{tikzpicture}
  \begin{axis}
    \addplot table [x=a,y=b]{\newdata};
  \end{axis}
\end{tikzpicture}
\end{document}

输出如下:

在此处输入图片描述

答案2

唉,\pgfplotstablevertcat不支持选项。顺便说一句,这假设您知道要删除哪些行。

\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotstableread[col sep=comma]{
  a,b,c,d
  1,1,1,1
  2,2,,
  3,3,3,3
}\data
\begin{document}
\pgfplotstablesave[skip rows between index={1}{2}]{\data}{filename}% create new file
\pgfplotstableread{filename}\data% read new file
\pgfplotstabletypeset{\data}
\begin{tikzpicture}
  \begin{axis}
    \addplot table [x=a,y=b]{\data};
  \end{axis}
\end{tikzpicture}
\end{document}

此版本在 c 列中搜索缺失数据。

\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotstableread[col sep=comma]{
  a,b,c,d
  1,1,1,1
  2,2,,
  3,3,3,3
}\data
\begin{document}
\pgfplotstablegetrowsof\data
\count1=\pgfplotsretval\relax
\loop\ifnum\count1>0\relax
  \count2=\count1
  \advance\count1 by -1
  \pgfplotstablegetelem{\count1}{c}\of\data
  \ifx\empty\pgfplotsretval\relax
    \pgfplotstablesave[skip rows between index={\count1}{\count2}]{\data}{filename}% remove this row
    \pgfplotstableread{filename}\data% read new file
  \fi
\repeat
\pgfplotstabletypeset{\data}
\begin{tikzpicture}
  \begin{axis}
    \addplot table [x=a,y=b]{\data};
  \end{axis}
\end{tikzpicture}
\end{document}

相关内容