考虑以下 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}
但是我并不想连接所有数据点。相反,我想省去每个第二个连接,在本例中,它们是相同 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}
对于表格来说这也是同样的操作方式。
\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}
至于您的问题的更新,这里有一种跳过每第 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}
如果您想跳过每 3 个连接,请使用\addplot[discard every=3,blue] table {....
。
但请注意,标记现在是在分散代码中定义的。