我想知道是否可以在 pgfplots 中创建一个散点图,其样式与 gnuplot 中的“pointintervalbox”选项类似,即带有点和线的图,但线和点之间存在间隙。
这是一个例子:
也许类似的东西已经存在,但我找不到它,因为我真的不知道如何描述它。
谢谢
答案1
原则上,您可以使用mesh
样式来实现这一点:对于线图,这会导致使用单独的线段绘制线条,而不是使用一条连续的路径。然后,您可以应用选项shorten <=1mm, shorten >=1mm
来偏移线段的起点和终点。
但是,有一个实现细节阻碍了这一点:目前,PGFPlots 使用\pgfusepathqstroke
来绘制线段,这会忽略所有选项,例如箭头尖端或缩短。因此,为了使其工作,我们必须重新定义一个内部宏来改用\pgfusepath{stroke}
。这是一个处理该问题的键,它采用一个可选参数来设置间隙长度:
\makeatletter
\pgfplotsset{
discontinuous line/.code={
\pgfkeysalso{mesh, shorten <=#1, shorten >=#1,
legend image code/.code={
\draw [##1, shorten <=0cm] (0cm,0cm) -- (0.3cm,0cm);
\draw [only marks] plot coordinates {(0.3cm,0cm)};
\draw [##1, shorten >=0cm] (0.3cm,0cm) -- (0.6cm,0cm);
}}
\def\pgfplotsplothandlermesh@VISUALIZE@std@fill@andor@stroke{%
\pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{fill path}%
\pgfplotsplothandlermesh@definecolor
\pgfusepath{stroke}
\pgfplotsplothandlermesh@show@normals@if@configured
}%
},
discontinuous line/.default=1.5mm
}
\makeatother
将该代码片段放在您的序言中,之后\usepackage{pgfplots}
,您可以获得如下不连续的行:
\begin{axis}
\addplot [discontinuous line, black, mark=*] table {
0 5
1 3
2 4
3 8
4 0
};
\addplot [discontinuous line=3mm, red, mark=*] table {
0 1
2 5.5
3 7.25
4 8
};
\end{axis}
完整代码:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\makeatletter
\pgfplotsset{
discontinuous line/.code={
\pgfkeysalso{mesh, shorten <=#1, shorten >=#1,
legend image code/.code={
\draw [##1, shorten <=0cm] (0cm,0cm) -- (0.3cm,0cm);
\draw [only marks] plot coordinates {(0.3cm,0cm)};
\draw [##1, shorten >=0cm] (0.3cm,0cm) -- (0.6cm,0cm);
}}
\def\pgfplotsplothandlermesh@VISUALIZE@std@fill@andor@stroke{%
\pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{fill path}%
\pgfplotsplothandlermesh@definecolor
\pgfusepath{stroke}
\pgfplotsplothandlermesh@show@normals@if@configured
}%
},
discontinuous line/.default=1.5mm
}
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis background/.style={
shade,bottom color=gray!50,top color=white
}
]
\addplot [discontinuous line, black, mark=*] table {
0 5
1 3
2 4
3 8
4 0
};
\addplot [discontinuous line=3mm, red, mark=*] table {
0 1
2 5.5
3 7.25
4 8
};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
如果没有不同的背景颜色,你可以用背景颜色绘制标记
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}
\begin{axis}[]
\addplot+[mark options={very thick,draw=white},samples=5] {rand};
\end{axis}
\end{tikzpicture}
\end{document}