TikZでは$y=x^2+x$や$y=\sin{x}$などといった$y=f(x)$の陽関数だけでなく,媒介変数表示された点$(x(t),y(t))$のグラフを描くこともできます.
関数のグラフを書くための三角関数,指数関数,対数関数のコマンドも用意されており,初等関数はほぼ問題なく描くことができます.
もちろん前回の記事で説明した線のスタイルの変更もできるので,重要なグラフは太くするといった描画も可能です.
また,極座標表示も可能なので,極方程式のグラフも描くことができます.
なお,本稿では以下のように3つのライブラリ”intersections”, “calc”, “arrows.meta”を用います.
1 2 3 4 5 6 7 |
\documentclass[dvipdfmx]{jsarticle} \usepackage{tikz} \usetikzlibrary{intersections,calc,arrows.meta} \begin{document} \end{document} |
なお,ライブラリについては最初の記事で説明しています.
「TikZの使い方」の一連の記事
グラフを描く方法
ここでは,陽関数$y=f(x)$のグラフの描き方を説明します.
グラフの基本
例えば,
1 2 3 4 5 6 7 8 |
\begin{tikzpicture} \draw[->,>=stealth,semithick] (-2,0)--(2,0)node[above]{\$x\$}; %x軸 \draw[->,>=stealth,semithick] (0,-1)--(0,3)node[right]{\$y\$}; %y軸 \draw (0,0)node[below right]{O}; %原点 \draw (-1,0)node[below]{\$-1\$}; %点(-1,0) \draw (0,1)node[right]{\$1\$}; %点(0,1) \draw[very thick,domain=-2:2] plot(\x,\x+1)node[right]{\$y=x+1\$}; \end{tikzpicture} |
と記述すれば,
と表示されます.すなわち,
1 |
\tikz \draw[domain=a:b] plot(\x,{f(\x)}); |
と記述すれば,$y=f(x)$の$x\in [a,b]$のグラフが描けます.
関数
TikZでグラフを描く際,ある程度の関数を使えることが望ましいですね.
そして,実際にTikZにはいくつかの関数が標準で用意されています.
関数 | 記述 |
---|---|
四則演算(和,差,積,商) | + , - , * , / |
絶対値($|X|$) | abs(X) |
非負の平方根($\sqrt{X}$) | sqrt(X) |
三角関数($\sin{X}$,$\cos{X}$,$\tan{X}$) | sin(X), cos(X), tan(X) |
逆三角関数($\sin^{-1}{X}$,$\cos^{-1}{X}$,$\tan^{-1}{X}$) | asin(X), acos(X), atan(X) |
指数関数($e^X$) | exp(X) |
一般冪($X^Y$) | pow(X,Y) |
対数($\log{X}$, $\log_{10}{X}$, $\log_2{X}$) | ln(X), log10(X), log2(X) |
階乗($X!$) | factorial(x) |
天井関数,床関数($\lceil{X}\rceil$, $\lfloor{X}\rfloor$) | ceil(X), floor(x) |
最大,最小($\max(X1,\dots,Xn)$, $\min(X1,\dots,Xn)$) | max(X1,…,Xn), max(X1,…,Xn) |
また,
- ネイピア数(自然対数の底)$e$は e
- 円周率$\pi$は pi
と記述すれば,定数として扱うことができます.
注意1
例えば
1 |
\tikz \draw[domain=0:2.5] plot(\x,sqrt(\x)); |
とすると, (\x,sqrt(\x))の部分でコンパイルエラーが起こります.
これはTikZの座標の記述の丸括弧( )のなかに,直接丸括弧( )を入れることができないことが原因で起こります.
この対策として,
1 |
\tikz \draw[domain=0:2.5] plot(\x,{sqrt(\x)}); |
などと中括弧{ }でワンクッション入れれば,エラーが解消されます.
注意2
三角関数($\sin{X}$,$\cos{X}$,$\tan{X}$)は全て度数法で判断されます.したがって,例えば
1 |
\tikz \draw(pi,{sin(pi)})node{A}; |
は点$(\pi,\sin{\pi^\circ})$に$\mrm{A}$が表示されてしまいます.
三角関数の引数を度数法ではなく弧度法で解釈させたい場合には, (pi,{sin(pi r)}) のように引数の後に”r”を追加することで弧度法として実行させることができます.
グラフの例
例えば,
1 2 3 4 5 6 7 8 |
\begin{tikzpicture} \draw[->,>=stealth,semithick] (-3.5,0)--(3.5,0)node[above]{\$x\$}; %x軸 \draw[->,>=stealth,semithick] (0,-3.5)--(0,2.5)node[right]{\$y\$}; %y軸 \draw (0,0)node[below right]{O}; %原点 \draw[magenta,very thick,domain=0:3.5] plot(\x,{sqrt(\x)})node[right]{\$y=\sqrt{x}\$}; \draw[blue,very thick,domain=-3.5:3.5] plot(\x,{-abs(\x)})node[right]{\$y=-|x|\$}; \draw[orange,very thick,domain=-3.5:3.5] plot(\x,{cos(\x r)})node[right]{\$y=\cos{x}\$}; \end{tikzpicture} |
と記述すれば,
と表示されます.
グラフのオプション
plotでグラフを書く際に,いくつかのオプションがあります.
プロットする点を増やす方法
plot(座標)によるグラフの描画は,区間を等間隔に区切ってできる25個の点をプロットし,それらを線分で結んで描いています.
プログラミングでもよくあるように,このままだと細かい動きのあるグラフではプロットした点の間の動きを捉えられないことも多く,実際に上で描いた赤線$y=\sqrt{x}$は理論上では点$(0,0)$で$x$軸に垂直に刺さるはずですが,斜めに刺さっているように見えます.
また,緑線$y=\cos{x}$のグラフも,よく見るとカクカクしたグラフになっています.
そこで,
1 |
\tikz \draw[samples=100,domain=0:2.5] plot(\x,{sqrt(\x)}); |
のように samples=(プロットする点の数) をオプションに加えることで,プロットする点の数を変え,より精度の良いグラフを描くことができます.
実際,
1 2 3 4 5 6 7 8 |
\begin{tikzpicture} \draw[->,>=stealth,semithick] (-3.5,0)--(3.5,0)node[above]{\$x\$}; %x軸 \draw[->,>=stealth,semithick] (0,-3.5)--(0,2.5)node[right]{\$y\$}; %y軸 \draw (0,0)node[below right]{O}; %原点 \draw[magenta,very thick,samples=100,domain=0:3.5] plot(\x,{sqrt(\x)})node[right]{\$y=\sqrt{x}\$}; \draw[blue,very thick,domain=-3.5:3.5] plot(\x,{-abs(\x)})node[right]{\$y=-|x|\$}; \draw[orange,very thick,samples=100,domain=-3.5:3.5] plot(\x,{cos(\x r)})node[right]{\$y=\cos{x}\$}; \end{tikzpicture} |
と記述すれば, samples=100だからプロットする点を100個になり
と先ほどよりなめらかになりましたね.
変数を変える
結局,区間を等間隔に区切ってプロットし,線分で結ぶという作業をしているのが”plot”なので, plot(座標)の第1成分が \xである必要はありません.
$x$が実数を動くとき
は平面上にサイクロイドを描くので,
1 2 3 4 5 6 7 8 |
\begin{tikzpicture} \draw[->,>=stealth,semithick] (-0.5,0)--(2*pi+0.5,0)node[above]{\$x\$}; %x軸 \draw[->,>=stealth,semithick] (0,-0.5)--(0,2.5)node[right]{\$y\$}; %y軸 \draw (0,0)node[above left]{O}; %原点 \draw[very thick,samples=100,domain=0:2*pi] plot({\x-sin(\x r)},{1-cos(\x r)}); %サイクロイド \draw (2*pi,0)node[below]{\$2\pi\$}; %点(2\pi,0) \draw[dashed] (0,2)node[left]{2}--(pi,2)--(pi,0)node[below]{\$\pi\$}; %点(\pi,2) \end{tikzpicture} |
とすれば,サイクロイドが描けます.
しかし,媒介変数表示はデフォルトの \xよりも別の文字で表す方が,媒介変数らしいですね.
そこで,オプションに variable=\t を追加することで,変数を \tで表すことができます.すなわち,サイクロイドの記述を
1 |
\draw[very thick,samples=100,domain=0:2*pi,variable=\t] plot({\t-sin(\t r)},{1-cos(\t r)}); %サイクロイド |
としても上のサイクロイドと同じものが描けます.
極座標
次に,TikZでの極座標に関する表現について説明します.
極座標での表し方
極座標上の偏角$a^{\circ}$,半径$r$の点$(a^{\circ},r)$は,TikZでは (a:r)で表すことができます.例えば,
1 |
\tikz \draw[->] (0,0)--(30:2); |
と記述すれば,
のように,原点を始点とする長さ2,偏角$30^{\circ}$のベクトルが表示されます.TikZの極座標表示では度数法により解釈されることに注意してください.
度数法を弧度法として解釈させたい場合には,三角関数の引数と同様に
1 |
\tikz \draw[->] (0,0)--(pi/6 r:2); |
と記述します.
円弧
半径$r$の円に対して,偏角$a^{\circ}$の位置にある点(A)と偏角$b^{\circ}$の位置にある点Bを考えます.
この弧ABは
1 |
\tikz \draw (A) arc(a:b:r); |
と記述すれば表示できます.
例えば,
1 2 3 4 5 6 7 8 |
\begin{tikzpicture} \draw[->,>=stealth,semithick] (-1.5,0)--(2.5,0)node[above]{\$x\$}; %x軸 \draw[->,>=stealth,semithick] (0,-0.5)--(0,1)node[right]{\$y\$}; %y軸 \draw (0,0)node[above left]{O}; %原点 \draw (2,1)node[right]{A}; %点A(2,1) \draw[very thick] (2,1) arc (60:110:3); %点Aが偏角60度の点であるような半径3の円の,偏角60度から110度の部分の円弧 \draw (2,1)++(60:-3)++(110:3)node[left]{B}; %円弧のAでない方の端点B(2,1) \end{tikzpicture} |
と記述すれば,
と表示されます.
極方程式のグラフ
極方程式のグラフは,直交座標の“plot”と極座標表示を組み合わせることで描くことができます.
例えば,$a>0$に対して極方程式$r=2a\cos{\theta}$は点$(a,0)$中心,半径$a$の円周を表すので,
1 2 3 4 5 |
\begin{tikzpicture} \draw[->,>=stealth,semithick] (0,0)--(4,0)node[right]{\$x\$}; %始線 \draw (0,0)node[left]{O}; %極 \draw[very thick,samples=100,domain=0:2*pi,variable=\theta] plot(\theta r:{2*1.5*cos(\theta)}); %点(1.5,0)を中心とする半径1.5の円 \end{tikzpicture} |
と記述すれば,
と極座標上で点$(1.5,0)$を中心とする半径1.5の円が表示されます.
コメント