我已经将一些数据存储在 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}