在 pgfplot 中组合跳过坐标和每个第 n 个命令的预期行为是什么。使用以下代码,我预计会得到一个包含点 (250, 30) 和 (300, 40) 的图以及另一个包含点 (250, 14) 和 (300, 18) 的图。
相反,第一个图是正确的,而第二个图仅产生点 (300, 40),好像这两个选项不能一起发挥作用。
\usepackage{filecontents}
\begin{filecontents}{results.data}
Move Size Factor
A 250 30
B 250 14
C 250 10
A 300 40
B 300 18
C 300 7
\end{filecontents}
\begin{figure}[!ht]
\centering
\pgfplotsset{tick label style={font=\small}}
\begin{tikzpicture}
\begin{axis}[ scale only axis, yticklabel style={inner sep=0pt, align=right, xshift=-0.1cm} ]
\addplot+[color=blue,only marks,mark=*,mark options=solid, mark options={scale=0.4},each nth point={3}]table[x=Size,y=Factor]{results.data};
\end{axis}
\end{tikzpicture}
\end{figure}
\begin{figure}[!ht]
\centering
\pgfplotsset{tick label style={font=\small}}
\begin{tikzpicture}
\begin{axis}[ scale only axis, yticklabel style={inner sep=0pt, align=right, xshift=-0.1cm},
,skip coords between index={0}{1}
]
\addplot+[color=blue,only marks,mark=*,mark options=solid, mark options={scale=0.4},each nth point={3}]table[x=Size,y=Factor]{results.data};
\end{axis}
\end{tikzpicture}
\end{figure}
答案1
我猜你的意思是“你希望得到”而不是“你期望”。each nth point
附加一个x filter
,它会丢弃除每个第 n 个输入坐标之外的所有坐标(如手册中所述)。现在你添加x filter
另一个skip coords between index={0}{1}
另一个此外过滤掉第一个点。因此,除了缺少第一个绘制的点之外,您将获得与之前相同的结果。
所以我认为你必须自己编写一个x filter
来实现你想要的功能。另一种可能性是使用mark repeat
和mark phase
功能来实现你想要的功能。这种方法的缺点是,确定的轴限值(xmin
、xmax
、ymin
、ymax
)也考虑了“未显示”的点。如果这让你感到困扰,你必须手动设置值。
% used PGFPlots v1.14
\begin{filecontents}{results.data}
Move Size Factor
A 250 30
B 250 14
C 250 10
A 300 40
B 300 18
C 300 7
\end{filecontents}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
only marks,
]
\addplot+ [
each nth point={3},
] table [x=Size,y=Factor] {results.data};
\addplot+ [
mark=square,
mark repeat={3},
] table [x=Size,y=Factor] {results.data};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[
only marks,
]
\addplot+ [
each nth point={3},
skip coords between index={0}{1},
] table [x=Size,y=Factor] {results.data};
\addplot+ [
mark=square,
mark repeat={3},
mark phase=2,
] table [x=Size,y=Factor] {results.data};
\end{axis}
\end{tikzpicture}
\end{document}