请查看以下 MWE:
\documentclass{article}
\usepackage{pgfplots,pgfplotstable}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
%ymode=log,
]
\addplot coordinates {
(0, 6.887e-02)
(0.5, 3.177e-02)
(1, 1.341e-02)
(1.5, 5.334e-03)
(2, 2.027e-03)
(2.5, 7.415e-04)
(3, 2.628e-04)
(3.5, 9.063e-05)
(4, 3.053e-05)
};
\draw (axis cs:1.2,\pgfkeysvalueof{/pgfplots/ymin}) -- (axis cs:1.2,\pgfkeysvalueof{/pgfplots/ymax});
\end{axis}
\end{tikzpicture}
\end{document}
它生成如下图形(一些数据在 x=1.2 处有一条垂直线):
一旦我取消注释 ymode=log,垂直线就会消失。真倒霉!
答案1
您可以使用\draw ({axis cs:1.2,0}|-{rel axis cs:0,0}) -- ({axis cs:1.2,0}|-{rel axis cs:0,1})
从绘图区顶部到底部绘制垂直线。这个命令乍一看有点吓人,但其实并不那么糟糕:
点rel axis cs:0,0
是绘图区域的左下角,rel axis cs:0,1
是左上角。语法(A|-B)
指定位于一条垂直线A
和一条水平线交点处的点B
(换句话说,我们使用的x
坐标A
和y
B 的坐标)。在坐标规范中使用axis cs
和时rel axis cs
,需要将它们分组{...}
以隐藏逗号。
\documentclass{article}
\usepackage{pgfplots,pgfplotstable}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymode=log,
]
\addplot coordinates {
(0, 6.887e-02)
(0.5, 3.177e-02)
(1, 1.341e-02)
(1.5, 5.334e-03)
(2, 2.027e-03)
(2.5, 7.415e-04)
(3, 2.628e-04)
(3.5, 9.063e-05)
(4, 3.053e-05)
};
\draw ({axis cs:1.2,0}|-{rel axis cs:0,1}) -- ({axis cs:1.2,0}|-{rel axis cs:0,0});
\end{axis}
\end{tikzpicture}
\end{document}
答案2
使用 PGFPlots 1.11 或更高版本,使用以下等效语法可以使 Jake 的解决方案变得不那么令人生畏。
\draw (1.2,0 |- current axis.south) -- (1.2,0 |- current axis.north);
自该版本以来,axis cs
一直是默认值,因此可以省略。我发现 TikZ 的锚点(任何节点的属性,PFGPlots 轴是其中之一)比 更易于使用rel axis cs
。没有坐标说明符,就不需要括号了。
\documentclass{article}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=1.11} % <=== or later
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymode=log,
]
\addplot coordinates {
(0, 6.887e-02)
(0.5, 3.177e-02)
(1, 1.341e-02)
(1.5, 5.334e-03)
(2, 2.027e-03)
(2.5, 7.415e-04)
(3, 2.628e-04)
(3.5, 9.063e-05)
(4, 3.053e-05)
};
\draw (1.2,0 |- current axis.south) -- (1.2,0 |-
current axis.north);
\end{axis}
\end{tikzpicture}
\end{document}