在 pgfplots 图表中插入单独的标记

在 pgfplots 图表中插入单独的标记

首先,如果标题不够清楚,我深感抱歉,但我不知道如何更好地解释自己。

我有一张由三条不同曲线组成的图表,除了一个点外,它们覆盖的 y 范围几乎相同。由于这个点对应的 y 值比其他点高得多,所以我不想直接报告它,因为这会导致所有其他点变平。因此,我的解决方案是在图表的单独位置报告这个唯一的点,并用箭头表示它超出范围,并给出其坐标:

\documentclass{scrbook}
\usepackage{classicthesis}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}
    \begin{axis}[
     xlabel={x},
     ylabel={y},
     xmin=0, xmax=120,
     ymin=0, ymax=5,
     width=.8\columnwidth,
     cycle list name=black white,
     /pgfplots/ytick={1,2,...,5}]
     \addplot
     coordinates{
     (3,    25)
     (5,    4)
     (10,   2)
     (20,   1)
     (40,   0.5)
     };
     \addplot
     coordinates{
     (6,    4)
     (10,   2)
     (20,   1)
     (40,   0.5)
     (80,   0.5)
     };
     \addplot
     coordinates{
     (9,    3)
     (15,   1.5)
     (30,   0.5)
     (60,   0.5)
     (120,  0.5)
     };
     \node at (axis cs:25,4.5) {$\uparrow(3,25)$};
     \legend{1,2,3}
     \end{axis}
\end{tikzpicture}

\end{document}

我要问您的是:

  • 正如您所注意到的,我正在使用\uparrow符号来创建箭头,但我想要更细更长的箭头。
  • 我不希望被迫手动报告该点的坐标。
  • 我想在箭头和坐标之间添加一个标记,它应该具有与第一条曲线相同的样式。

感谢您的帮助。

编辑:

尽管我对此并不完全满意,但我还是采取了以下解决方案:

\documentclass{scrbook}
\usepackage{classicthesis}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}
    \begin{axis}[
     xlabel={x},
     ylabel={y},
     xmin=0, xmax=120,
     ymin=0, ymax=5,
     width=.8\columnwidth,
     cycle list name=black white,
     /pgfplots/ytick={1,2,...,5}]
     \addplot
     coordinates{
     (3,    25)
     (5,    4)
     (10,   2)
     (20,   1)
     (40,   0.5)
     };
     \addplot
     coordinates{
     (6,    4)
     (10,   2)
     (20,   1)
     (40,   0.5)
     (80,   0.5)
     };
     \addplot
     coordinates{
     (9,    3)
     (15,   1.5)
     (30,   0.5)
     (60,   0.5)
     (120,  0.5)
     };
     \draw[-latex] (axis cs:12,4.25) -- (axis cs:12,4.75);
     \addplot[fill=gray,mark=*]
     coordinates{
     (15.5, 4.5)
     };
     \node[right] at (axis cs:16,4.5) {$(3,25)$};
     \legend{1,2,3}
     \end{axis}
\end{tikzpicture}

\end{document}

结果如下:

结果

答案1

另一种方法是使用键restrict y to domain*=0:5.5,它将最大 y 值限制为 5.5,结合clip=false,允许绘图延伸到绘图边界之外。然后,您可以放置​​一个标签节点和一个定位节点,可用于绘制“中断”符号:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}
    \begin{axis}[
     xlabel={x},
     ylabel={y},
     xmin=0, xmax=120,
     ymin=0, ymax=5,
     width=.8\columnwidth,
     cycle list name=black white,
     /pgfplots/ytick={1,2,...,5},
     clip=false,
     restrict y to domain*=0:5.5]
     \addplot
     coordinates{
     (3,    25)
     (5,    4)
     (10,   2)
     (20,   1)
     (40,   0.5)
     } node [pos=0,anchor=west] {(3\,,\,25)}
        node (break) [pos=0.0125,inner sep=0pt,minimum width=0.75em, minimum height=0.5ex,fill=white] {};
     \draw [fill=red] (break.north east) -- (break.north west) (break.south west) -- (break.south east);
     \addplot
     coordinates{
     (6,    4)
     (10,   2)
     (20,   1)
     (40,   0.5)
     (80,   0.5)
     };
     \addplot
     coordinates{
     (9,    3)
     (15,   1.5)
     (30,   0.5)
     (60,   0.5)
     (120,  0.5)
     };
     \legend{1,2,3}
     \end{axis}
\end{tikzpicture}

\end{document}

答案2

您可以使用resizebox该包提供的命令graphicx

\documentclass{scrbook}
\usepackage{classicthesis}
\usepackage{tikz}
\usepackage{pgfplots}

\usepackage{graphicx}
\usetikzlibrary{arrows}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
     xlabel={x},
     ylabel={y},
     xmin=0, xmax=120,
     ymin=0, ymax=5,
     width=.8\columnwidth,
     cycle list name=black white,
     /pgfplots/ytick={1,2,...,5}]
     \addplot
     coordinates{
     (3,    25)
     (5,    4)
     (10,   2)
     (20,   1)
     (40,   0.5)
     };
     \addplot
     coordinates{
     (6,    4)
     (10,   2)
     (20,   1)
     (40,   0.5)
     (80,   0.5)
     };
     \addplot
     coordinates{
     (9,    3)
     (15,   1.5)
     (30,   0.5)
     (60,   0.5)
     (120,  0.5)
     };
     %  \node at (axis cs:25,4.5) {$\uparrow(3,25)$};
     \node at (axis cs:25,4) {\resizebox{2mm}{10mm}{$\uparrow$}(3,25)};
     %\draw[-latex] (axis cs:25,3.7) -- node[right] {(3,25)} (axis cs:25,4.7) ;
     \legend{1,2,3}
     \end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

或者,您也可以使用TikZ它来绘制箭头,如果加载库,则可以从不同的箭头提示中进行选择arrows(请参阅此快速参考) 通过

\draw[-latex] (axis cs:25,3.7) -- node[right] {(3,25)} (axis cs:25,4.7);

在此处输入图片描述

相关内容