这似乎与如何使用 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}