![見出し画像](https://assets.st-note.com/production/uploads/images/61857091/rectangle_large_type_2_12b9f28325483a8f7988707664951030.png?width=1200)
TikZ 入門(2) ~関数グラフを描く~
我々の仕事(数学を教える仕事)で一番多く描くのは関数グラフです。(中学生相手だと幾何の方が多いかも…)
そこで、今回は y=f(x) 型の関数グラフの描き方を説明します。
座標軸
前回(TikZ 入門(1))の要領で、まずは座標軸を描きましょう。
文章中に
\begin{tikzpicture}[scale=1]
\draw[->,>=stealth,semithick] (-3,0)--(3,0) node[right]{$x$}; %x軸
\draw[->,>=stealth,semithick] (0,-1)--(0,4) node[left]{$y$}; %y軸
\draw (0,0) node[below left]{O}; %原点
\end{tikzpicture}
と書きます。もちろん、座標軸の範囲は好きなように設定してください。
で、コンパイルすると
![画像1](https://assets.st-note.com/production/uploads/images/61850883/picture_pc_bf8d6454140ad98b0e36f66a3a6742b7.png)
こんな感じ。
関数グラフの入力
さて、本題ですが、y=f(x) 型のグラフを描かせるには「plot」というコマンドを使います。例えば、y=x/2+1 のグラフは
\draw plot(\x,\x/2+1);
と入力してあげれば
![画像2](https://assets.st-note.com/production/uploads/images/61851211/picture_pc_f8d5eb8945acfc95e789f4df55f8f9d3.png)
となります。
x 座標 \x に対して、y 座標を \x の式で表現してあげるということですね。
このとき
四則演算 + - * /
べき関数 x^n pow(\x,n)
ルート √x sqrt(\x)
三角関数 sin(\x), cos(\x), tan(\x) (度数法)
三角関数 sin(\x r), cos(\x r), tan(\x r) (弧度法)
指数関数 exp(\x)
対数関数 ln(\x),log2(\x)
などが使えます。(plot 以外でも使えます。)
太さを変えたり、定義域を指定するときは
\draw[thick,domain=-3:3] plot(\x,\x/2+1);
というオプションをつけてあげます。そうすると
![画像3](https://assets.st-note.com/production/uploads/images/61851483/picture_pc_42bfe7dccd364df81be36b9817a2833c.png)
となります。
滑らかな曲線を描く
plot という名前の通り、点をいくつかプロットして結んでいるようです。
だから、曲線を描くとカクカクします。例えば
\draw[->,>=stealth,semithick] (-4,0)--(4,0) node[right]{$x$}; %x軸
\draw[->,>=stealth,semithick] (0,-3)--(0,3) node[left]{$y$}; %y軸
\draw (0,0) node[below left]{O}; %原点
\draw[thick,domain=-4:4] plot(\x,{2*sin(\x r)});
とすると
![画像4](https://assets.st-note.com/production/uploads/images/61852443/picture_pc_3fd49f0923c97d821709860bef6d18ef.png?width=1200)
こんな感じ。
この plot する点を増やしてあげれば滑らかに繋がるはずです。そこで
\begin{tikzpicture}[scale=1]
のオプションを
\begin{tikzpicture}[scale=1,samples=300]
としてあげます。そうすると
![画像5](https://assets.st-note.com/production/uploads/images/61852675/picture_pc_8c84839d95838c502073e30ebbd82339.png?width=1200)
イイ感じ♪
図を切り取る
いくつかのグラフをひとつの座標平面に描くときは、ひとつひとつの定義域を考えるのが面倒です。雑に
\draw[->,>=stealth,semithick] (-4,0)--(4,0) node[right]{$x$}; %x軸
\draw[->,>=stealth,semithick] (0,-3)--(0,3) node[left]{$y$}; %y軸
\draw (0,0) node[below left]{O}; %原点
\draw[thick,domain=-4:4] plot(\x,{sin(\x r)});
\draw[thick,domain=-2:2] plot(\x,{pow(\x,2)});
\draw[thick,domain=-4:4] plot(\x,\x);
なんて入力すると
![画像6](https://assets.st-note.com/production/uploads/images/61853157/picture_pc_25ea29801de25b116a4520c0e79b10bd.png)
こんな感じ。
つまり domain というのは x の範囲の指定だけなので、y の範囲指定ができないのです。
そこで scope 環境の \clip というコマンドが便利です。
\begin{scope} \clip (左下) rectangle (右上);
グラフの入力
\end{scope}
とすると (左下) から (右上) までの長方形の範囲を切り取って、そこだけ描画してくれるのです。このとき、各グラフの domain 指定は不要です。
例えば
\draw[->,>=stealth,semithick] (-4,0)--(4,0) node[right]{$x$}; %x軸
\draw[->,>=stealth,semithick] (0,-3)--(0,3) node[left]{$y$}; %y軸
\draw (0,0) node[below left]{O}; %原点
\begin{scope} \clip (-4,-3) rectangle (4,3);
\draw[thick] plot(\x,{sin(\x r)});
\draw[thick] plot(\x,{pow(\x,2)});
\draw[thick] plot(\x,\x);
\end{scope}
とすると
![画像7](https://assets.st-note.com/production/uploads/images/61853534/picture_pc_09047d7ba318c4db40deeb117b16b4ca.png)
こんな感じ。
ついでに、\end{scope} の下に
\draw ({-sqrt(3)},3) node[above]{$y=x^2$};
\draw (3,3) node[right]{$y=x$};
\draw (4,{sin(4 r)}) node[below]{$y=\sin x$};
とでも入力すれば
![画像8](https://assets.st-note.com/production/uploads/images/61856029/picture_pc_9c4596e3636b1f4a212ea0cf8e9b729d.png)
こんな感じになります。
座標軸や、各グラフの式などは scope 環境の外に書かないと、切り取られてしまい描画されない可能性がありますので注意が必要です。
今回はここまで。