ymode=对数图中的垂直线

ymode=对数图中的垂直线

请查看以下 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 处有一条垂直线):

some data with a vertical line at 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坐标AyB 的坐标)。在坐标规范中使用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}

相关内容