省略 pgfplots 中的每第 n 个连接

省略 pgfplots 中的每第 n 个连接

考虑以下 MWE:

\documentclass{article}

\usepackage{pgfplots}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}
            \addplot coordinates {(4,0) (3,3) (3,0) (2,2) (2,0) (1,1)};
        \end{axis}
    \end{tikzpicture}
\end{document}

绘制如下图所示: Resultimg diagram

但是我并不想连接所有数据点。相反,我想省去每个第二个连接,在本例中,它们是相同 x 坐标之间的垂直连接。因此,以更一般的形式,我要求一种方法来省去图表中的每第 n 个连接。

PS:
我需要使用命令的解决方案\addplot table{...},这意味着输入数据或多或少是固定的,我更喜欢一种方法来pgfplots决定在哪里连接而不是修改输入数据文件。

答案1

正如手册第 45 页所述,您所要做的就是切换到 1.4 或更高版本,并在想要跳转的位置添加一个空行。

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}
            \addplot coordinates {(4,0) (3,3) (3,0) (2,2) 

            (2,0) (1,1)};
        \end{axis}
    \end{tikzpicture}
\end{document}

enter image description here

对于表格来说这也是同样的操作方式。

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}
            \addplot table {
            X Y 
            4 0 
            3 3 

            3 0 
            2 2 

            2 0 
            1 1
            };
        \end{axis}
    \end{tikzpicture}
\end{document}

enter image description here

至于您的问题的更新,这里有一种跳过每第 n 个连接的方法。

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.16,
discard every/.style={
    scatter,only marks,mark=none,
    scatter/position=absolute,  
    scatter/@pre marker code/.code={
        \node[circle,fill,inner sep=2pt] (pt-\pgfkeysvalueof{/data point/index}) at 
    (\pgfkeysvalueof{/data point/x},\pgfkeysvalueof{/data point/y}){};},
    scatter/@post marker code/.code={%
    \ifnum\pgfkeysvalueof{/data point/index}=0
    \else
      \pgfmathtruncatemacro{\itest}{mod(\pgfkeysvalueof{/data point/index},#1)}
      \ifnum\itest=0
      \else
        \pgfmathtruncatemacro{\lastindex}{\pgfkeysvalueof{/data point/index}-1}
        \draw (pt-\lastindex) -- (pt-\pgfkeysvalueof{/data point/index});
      \fi
    \fi
}}}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}
            \addplot[discard every=2,blue] table {
            X Y 
            4 0 
            3 3 
            3 0 
            2 2 
            2 0 
            1 1
            };
        \end{axis}
    \end{tikzpicture}
\end{document}

enter image description here

如果您想跳过每 3 个连接,请使用\addplot[discard every=3,blue] table {....

enter image description here

但请注意,标记现在是在分散代码中定义的。

相关内容