pgfplots 中线和点之间的间隙,类似于 gnuplot 中的 pointintervalbox

pgfplots 中线和点之间的间隙,类似于 gnuplot 中的 pointintervalbox

我想知道是否可以在 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}

在此处输入图片描述

相关内容