pgfplots:使用 foreach 计算交点并绘制指向轴的箭头

pgfplots:使用 foreach 计算交点并绘制指向轴的箭头

我正在尝试找到两条曲线之间的交点,并从每条曲线绘制指向 x 轴的箭头。我尝试了以下代码:

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{intersections}
\pgfplotsset{axis lines=middle,ticks={none}}

\begin{document}

\begin{tikzpicture}
\begin{axis}[x=1cm,y=1.5cm,domain=-8:8,samples=100]
  \addplot[name path global=sin,color=blue] {sin(deg(x))}; 
  \addplot[name path global=root,color=red] {1/2)};
  \foreach \s in {1,...,5}{ 
    \draw[name intersections={of=root and sin, name=i},->] 
      (i-\s)--({i-\s}|-{axis cs:0,0});
  }
\end{axis}
\end{tikzpicture}
\end{document}

但 LaTeX 会抱怨i-\s未定义(为什么?)。如果我尝试

\draw[name intersections={of=root and sin, name=i},->] 
\foreach \s in {1,...,5}{(i-\s)--({i-\s}|-{axis cs:0,0})};

然后它编译,但我没有得到想要的结果(只有最后一条垂直线有一个箭头,见附图)

在此处输入图片描述

我该怎么做才能实现我的愿望?

答案1

一种方法是在原点定义一个辅助坐标,并将循环移出环境axis。一般来说,内部循环axis 可能比较棘手,请参阅pgfplots手册第 8.1 节。

\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{intersections}
\pgfplotsset{axis lines=middle,ticks={none}}

\begin{document}

\begin{tikzpicture}
\begin{axis}[x=1cm,y=1.5cm,domain=-8:8,samples=100]
  \addplot[name path global=sin,color=blue] {sin(deg(x))}; 
  \addplot[name path global=root,color=red] {1/2)};
  \coordinate (origin) at (axis cs:0,0);
\end{axis}
  \foreach \s in {1,...,5}{ 
    \draw[name intersections={of=root and sin, name=i},->] 
      (i-\s)--(i-\s|-origin);
  }
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容