pgfplots:使用 pgfmath 计算轴 cs 点

pgfplots:使用 pgfmath 计算轴 cs 点

我正在尝试使用 pgfplots 构建一个图,在其中我使用 执行\draw命令axis cs。此外,使用循环生成的迭代器将 的坐标axis cs分配给数学表达式的结果foreach。这是我得到的代码:

\begin{tikzpicture}
  \begin{axis}[
  title=Sinusoid Sampled Values (1 Period),
  xlabel={$t$},
  ylabel={$A$},
  axis x line=middle,
  axis y line=left,
  xmin=0, xmax=2*pi,
  ymin=-1, ymax=1,
]
  \foreach \x in {0,1,...,15} {
    \draw (axis cs:\pgfmathparse{2*pi*\x/16}\pgfmathresult,0)
      -- (axis cs:\pgfmathparse{2*pi*\x/16}\pgfmathresult,\pgfmathparse{sin(2*pi*\x/16)}\pgfmathresult)
      circle[radius=2];
  }
\end{axis}
\end{tikzpicture}

但是,这失败了,我不确定是流程的哪个部分导致了这个问题。我怀疑是pgfmathparse,但也许是循环?我如何才能在这里实现所需的结果?如果您需要任何进一步的信息,请告诉我。

答案1

您可以使用 pgfplots-internal 命令来实现(可能)相同的效果:

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        title=Sinusoid Sampled Values (1 Period),
        xlabel={$t$},
        ylabel={$A$},
        axis x line=middle,
        axis y line=left,
        xmin=0, xmax=2*pi,
        ymin=-1, ymax=1,
    ]

    \addplot[ycomb, domain=0:15, samples=16, mark=*] (2*pi*x/16, {sin(2*pi*x/16 r)});
    \end{axis}
    \end{tikzpicture}  
\end{document}

注意:由于 pgf 需要三角函数中的度数,因此我添加了r将其转换为弧度。 在此处输入图片描述

另一个(甚至更简单的)解决方案:

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        title=Sinusoid Sampled Values (1 Period),
        xlabel={$t$},
        ylabel={$A$},
        axis x line=middle,
        axis y line=left,
        xmin=0, xmax=2*pi,
        ymin=-1, ymax=1,
        xtick={0, pi/2, pi, 3*pi/2, 2*pi},
        xticklabels={0, $\frac{\pi}{2}$,  $\pi$, $\frac{3}{2}\pi$, $2\pi$}
    ]

    \addplot expression[ycomb, domain=0:{30/16*pi}, samples=16, mark=o] {sin(\x r)};
    \end{axis}
    \end{tikzpicture}  
\end{document}

在此处输入图片描述

相关内容