我经常制作需要在函数上标记点的图,我更喜欢使用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}
结果: