pgfplots:帮助宏将线放到 x 轴

pgfplots:帮助宏将线放到 x 轴

我经常制作需要在函数上标记点的图,我更喜欢使用x ticks和从点到 x 轴画一条虚线来完成。我决定编写一个宏来自动执行此操作,它将从点到其在 x 轴上的投影画一条线,校正ymin。但是,宏生成的线不会在 x 轴结束(并且它们彼此结束在不同的地方),我不知道为什么。我怀疑我需要axis cs:一个地方,但我尝试过的地方似乎都行不通。

梅威瑟:

\documentclass[border=5pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}

\newcommand{\vertLineFromPoint}[1]{\draw[dashed] let \p1 = (#1) in (#1) -- 
(\x1,\pgfkeysvalueof{/pgfplots/ymin})}

    \begin{document}

    \begin{tikzpicture}

        \begin{axis}[
            axis lines=left,
            ymin=20,
            extra x ticks={1,3},
            extra x tick labels={$x_1$, $x_2$},
        ]

        \addplot+[mark=none,name path=sqr] {(x-5)^2+50}; 
        \addplot+[mark=none,name path=lin] {10*x+100};

        \coordinate (x1) at (axis cs:1,66);
        \vertLineFromPoint{x1};

        \node (x2) at (axis cs:3,54) {};
        \draw[dashed] (x2.center) -- (axis cs:3,\pgfkeysvalueof{/pgfplots/ymin});

        \path[name intersections={of=sqr and lin}];
        \vertLineFromPoint{intersection-1};

        \end{axis}

    \end{tikzpicture}

\end{document}  

结果图:

在此处输入图片描述

请注意,它适用于x2,我ymin在轴上而不是在宏中进行计算。

答案1

您的命令的问题在于,它以与单位不同的 TikZ 单位返回最终点的坐标axis。您可以通过以下方式修复此问题:

\newcommand{\vertLineFromPoint}[1]{
  \draw[dashed] 
    (#1) -- (#1|-{axis cs:0,\pgfkeysvalueof{/pgfplots/ymin}})
}

特别是,不需要计算库,因为所有操作都是使用垂直坐标系完成的。

\documentclass[border=5pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}

\newcommand{\vertLineFromPoint}[1]{
  \draw[dashed] 
    (#1) -- (#1|-{axis cs:0,\pgfkeysvalueof{/pgfplots/ymin}})
}

    \begin{document}

    \begin{tikzpicture}

        \begin{axis}[
            axis lines=left,
            ymin=20,
            extra x ticks={1,3},
            extra x tick labels={$x_1$, $x_2$},
        ]

        \addplot+[mark=none,name path=sqr] {(x-5)^2+50}; 
        \addplot+[mark=none,name path=lin] {10*x+100};

        \coordinate (x1) at (axis cs:1,66);
        \vertLineFromPoint{x1};

        \node (x2) at (axis cs:3,54) {};
        \draw[dashed] (x2.center) -- (axis cs:3,\pgfkeysvalueof{/pgfplots/ymin});

        \path[name intersections={of=sqr and lin}];
        \vertLineFromPoint{intersection-1};

        \end{axis}

    \end{tikzpicture}

\end{document}

结果:

在此处输入图片描述

相关内容