我正在尝试使用 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}