Plotpgf 跳过 coords+ 每第 n 个

Plotpgf 跳过 coords+ 每第 n 个

在 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 repeatmark phase功能来实现你想要的功能。这种方法的缺点是,确定的轴限值(xminxmaxyminymax)也考虑了“未显示”的点。如果这让你感到困扰,你必须手动设置值。

% 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}

该图显示了上述代码的结果

相关内容