如何使用 pgfplotstable 绘制每 4 行?

如何使用 pgfplotstable 绘制每 4 行?

这似乎与如何使用 pgfplotstable 显示大型数据文件中的每第 4 行?。我只是尝试绘制过滤后的行,但这里缺少了一些东西。这是 MWE(我从上一个链接复制了示例)。

\pgfplotstableread{
 obs      number
  1         2
  2         5
  3         3
  4         2
  5         4
  6         1
  7         2
  8         5
  9         3
  10        2
  11        4
  12        1
}\loadedtable

\pgfplotstabletypeset[
  row predicate/.code={%
    \pgfplotstablegetelem{#1}{obs}\of{\loadedtable}
    \pgfmathparse{int(Mod(\pgfplotsretval,4)}
    \ifnum \pgfmathresult = 0 
      \else \pgfplotstableuserowfalse
    \fi}
]{\loadedtable}

\begin{tikzpicture}
    \begin{axis}
   \addplot[only marks, 
    x filter/.code={\pgfplotstablegetelem{\coordindex}{obs}\of{\loadedtable}
                    \pgfmathparse{int(Mod(\pgfplotsretval, 4))}
                    \ifnum \pgfmathresult = 0 
                    \else
                    \def \pgfmathresult{}
                    \fi},
    ] table[x=obs,y=number] {\loadedtable};
   \end{axis}
\end{tikzpicture}

运行tabletypeset正常,但plot不起作用。有简单的解决办法吗?

顺便问一下,有没有办法将过滤后的表保存为新的宏,以便我可以直接在绘图中使用它?

任何帮助都将受到赞赏。

答案1

仅绘制每个n-th坐标,PGFPlots已经提供了机制mark repeat=<integer>mark offset=<integer>

\documentclass[border=5mm]{standalone}

\usepackage{pgfplots, pgfplotstable}
\begin{document}


\pgfplotstableread{
 obs      number
  1         2
  2         5
  3         3
  4         2
  5         4
  6         1
  7         2
  8         5
  9         3
  10        2
  11        4
  12        1
}\loadedtable

\pgfplotstabletypeset[
  row predicate/.code={%
    \pgfplotstablegetelem{#1}{obs}\of{\loadedtable}%
    \pgfmathparse{int(Mod(\pgfplotsretval,4)}%
    \ifnum \pgfmathresult = 0 %
      \else \pgfplotstableuserowfalse%
    \fi}
]{\loadedtable}

\begin{tikzpicture}
    \begin{axis}
   \addplot[only marks,
   mark repeat=4, mark phase=4
    ] table[x=obs,y=number] {\loadedtable};
   \end{axis}
\end{tikzpicture}

\end{document}

相关内容