首先,如果标题不够清楚,我深感抱歉,但我不知道如何更好地解释自己。
我有一张由三条不同曲线组成的图表,除了一个点外,它们覆盖的 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);