如何绘制实线中的区间和点?

如何绘制实线中的区间和点?

我需要在实线中绘制一系列区间(和点)集。区间可以是封闭的、左/右开放的或开放的。(开放/封闭的末端用空心/实心圆圈标记)孤立点只是点。区间组可能具有共同的样式和共同的图例。下面您可以看到一个模拟图。

在此处输入图片描述

我可以通过以下代码了解基础知识

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[title = {Number line}, axis y line=none, y=0.5cm/3, restrict y to domain=0:20, axis lines=left]
\addplot+[only marks] coordinates  {( 3.14, 0 )( 10, 0 )}; 
\addplot+[only marks] coordinates  {( 20, 0 ) ( 21, 0 )}; 
\end{axis}
\end{tikzpicture}
\end{document}

但很难进一步研究,因为我找不到方法来改变点的样式(例如从实心圆变为空心圆)coordinates和/或打破单个坐标集来绘制两个不相交的区间和具有相同样式的点(如下图中的蓝色集)。

我发现的替代方法是在环境tikz draw中使用axis

\draw[green, -|] (axis cs:5,0)--(axis cs:6,0); % something like "(-]" or "*-o" (if they worked) may be better

但在设置轴边界时会忽略这些点(我需要自动设置)。此外,我需要使用 pgfplots 来保持与其他(正常)图的一致性(就点、线和轴的样式而言)。

答案1

如果使用table而不是coordinates,则空行会告诉 pgfplots 不要连接点。要更改标记样式,可以使用 选项scatter/classes。请注意,这将为每个散点图类创建一个图例条目,因此在这种情况下,您应该只定义一个。

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    title = {Number line},
    axis y line=none,
    y=0.5cm/3,
    restrict y to domain=0:1,
    axis lines=left,
    enlarge x limits=upper,
    scatter/classes={
        o={mark=*,fill=white}
    },
    scatter,
    scatter src=explicit symbolic,
    every axis plot post/.style={mark=*,thick},
    legend style={
        draw=none,
        at={(1,1)},
        anchor=south east
    },
    legend image post style={mark=none}
]
\addplot table [y expr=0,meta index=1, header=false] {
3.14 c
10 o

13 c
15 c

17 c
};\addlegendentry{Set 1}
\addplot table [y expr=0,meta index=1, header=false] {
20 c
21 c
};\addlegendentry{Set 2}
\end{axis}
\end{tikzpicture}
\end{document}

相关内容