![编辑](https://linux22.com/image/314639/%E7%BC%96%E8%BE%91.png)
我修改了某人的代码并得到了我想要的三角函数图。但我想知道是否有比这更简单/优雅的代码。
具体来说,我希望有一个自动节点设置,而不是列出所有节点。另外,有没有更简单的方法来绘制三角函数图?我找到了 addplot 功能,但它似乎在当前代码/环境中不起作用(这是我更喜欢的)。
谢谢。
\documentclass[oneside]{book}
\usepackage{amsmath, amsthm}
\usepackage{forloop, tikz, realboxes}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=1cm,y=1.5cm]
\def\xmin{-2*pi}
\def\xmax{2*pi}
\def\ymin{-2}
\def\ymax{2}
% grid
\draw[style=help lines, ystep=1, xstep=pi/4] (\xmin,\ymin) grid (\xmax,\ymax);
% axes
\draw[thick, ->] (\xmin-.25,0) -- (\xmax+.25,0) node[right] {$x$};
\draw[thick, ->] (0,\ymin-.25) -- (0,\ymax+.25) node[above] {$y$};
% xticks and yticks
\foreach \x in {-6.28319,-5.4978, ..., 6.28319}{
\draw (\x,2pt) -- (\x,-2pt);
\node[fill=white] at (-2*pi, -.2) [below] {{$- 2\pi$}};
\node[fill=white] at (-7*pi/4, -.1) [below] {\tiny{$\dfrac{-7\pi}{4}$}};
\node[fill=white] at (-3*pi/2, -.1) [below] {\tiny{$\dfrac{-3\pi}{2}$}};
\node[fill=white] at (-5*pi/4, -.1) [below] {\tiny{$\dfrac{-5\pi}{4}$}};
\node[fill=white] at (-pi, -.2) [below] {{$-\pi$}};
\node[fill=white] at (-3*pi/4, -.1) [below] {\tiny{$\dfrac{-3\pi}{4}$}};
\node[fill=white] at (-pi/2, -.1) [below] {\tiny{$\dfrac{-\pi}{2}$}};
\node[fill=white] at (-pi/4, -.1) [below] {\tiny{$\dfrac{-\pi}{4}$}};
%
\node[fill=white] at (2*pi, -.2) [below] {{$2\pi$}};
\node[fill=white] at (7*pi/4, -.1) [below] {\tiny{$\dfrac{7\pi}{4}$}};
\node[fill=white] at (3*pi/2, -.1) [below] {\tiny{$\dfrac{3\pi}{2}$}};
\node[fill=white] at (5*pi/4, -.1) [below] {\tiny{$\dfrac{5\pi}{4}$}};
\node[fill=white] at (pi, -.2) [below] {{$\pi$}};
\node[fill=white] at (3*pi/4, -.1) [below] {\tiny{$\dfrac{3\pi}{4}$}};
\node[fill=white] at (pi/2, -.1) [below] {\tiny{$\dfrac{\pi}{2}$}};
\node[fill=white] at (pi/4, -.1) [below] {\tiny{$\dfrac{\pi}{4}$}};
}
\foreach \y in { -2, -1, 1, 2}
\draw (2pt, \y) -- (-2pt, \y);
\foreach \y in {-2, -1, 1, 2}
\node[fill=white] at (-.1,\y) [left] {\y};
\draw[ultra thick, red]
(-2*pi-pi/4,1) sin (-3*pi/2-pi/4,2) cos (-pi-pi/4,1) sin (-pi/2-pi/4,0) cos (0-pi/4,1)
sin (pi/2-pi/4,2) cos (pi-pi/4,1) sin (3*pi/2-pi/4,0) cos (2*pi-pi/4,1) sin (5*pi/2-pi/4,2);
\end{tikzpicture}
\end{document}
也就是说,
\draw[ultra thick, red]
(-2*pi,0) sin (-3*pi/2,1) cos (-pi,0) sin (-pi/2,-1) cos (0,0)
sin (pi/2,1) cos (pi,0) sin (3*pi/2,-1) cos (2*pi,0);
我想使用这样的东西:
\draw[scale=1,domain=-1.5:3.5,smooth,variable=\x,blue, thick] plot ({\x},{sin \x});
答案1
这是非常基本的。显然,您需要根据自己的目的调整刻度标签等。但您需要的代码如下所示:
\documentclass[tikz, border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}% ref: http://tex.stackexchange.com/a/147772/ by Harish Kumar
\addplot
[
domain=-0:2*pi,
smooth,
blue,
thick,
]
plot {sin(deg(x))};
\end{axis}
\end{tikzpicture}
\end{document}
编辑
这是一个开头,说明了如何思考关于创建您想要的东西。也就是说,我尝试在这里演示您想要使用的方法来实现这一点。
基本上,如果你想自己绘制所有东西,这样你就可以完全直接地控制标签、线条、网格等,那么你可以这样做。但在这种情况下,你也需要自己绘制函数。或者你必须想办法让绘制的函数与轴等对齐。由于这正是等的\addplot
设计目的,这似乎是在重新发明轮子,但归根结底,这是你的轮子。
另一方面,如果您希望能够使用您在问题中指出的那种语法来绘制函数,那么您需要\addplot
等等,并且您需要使用它的功能来按照您想要的方式配置轴、标签等。
我在做这项工作时参考了几个参考资料 - 一些来自手册,pgfplots
一些来自本网站的问题。我在代码中以注释的形式标明了问题及其作者,并附上了手册中最重要的要点的页面。
\documentclass[tikz,border=10pt]{standalone}
\usepackage{pgfplots,mathtools}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[% 290 of manual
xtick={-7.0686,-6.2831,...,7.0686},
xticklabels={% ref:http://tex.stackexchange.com/a/34958/ by Peter Grill
,
{$-2\pi$},
{\tiny$-\frac{7\pi}{4}$},
{\tiny$-\frac{3\pi}{2}$},
{\tiny$-\frac{5\pi}{4}$},
{$-\pi$},
{\tiny$-\frac{3\pi}{4}$},
{\tiny$-\frac{\pi}{2}$},
{\tiny$-\frac{\pi}{4}$},
{$0$},
{\tiny$\frac{\pi}{4}$},
{\tiny$\frac{\pi}{2}$},
{\tiny$\frac{3\pi}{4}$},
{$\pi$},
{\tiny$\frac{5\pi}{4}$},
{\tiny$\frac{3\pi}{2}$},
{\tiny$\frac{7\pi}{4}$},
{$2\pi$},
},
grid=major,
x=10mm,
y=20mm,
axis x line=center,% 218
axis y line=center,
xlabel={$x$},
ylabel={$y$},
every tick label/.style={fill=white},% 309
]
\addplot% ref: http://tex.stackexchange.com/a/147772/ by Harish Kumar
[
domain=-2.25*pi:2.25*pi,
smooth,
blue,
thick,
]
plot {sin(deg(x))};
\end{axis}
\end{tikzpicture}
\end{document}