見出し画像

TikZ 実用例(10)~繰り返し処理~

久しぶりの投稿です。
長い間、待たせてゴメン…(Kiroro って、今何してるの?)

今回は、繰り返し処理\foreach を解説します。(以前の記事にも出てますが…)

基本的な使い方

基本的には
 \foreach 変数 in{変数の動く集合} 命令
という形で使います。
例えば

\foreach \x in{1,2,3,4,5} \draw (\x,0) node{ほげ};

とすると

となります。
これは、変数 \x を 1 から 5 まで動かして、点 (\x, 0) に「ほげ」と書いています。
なお、これは

\foreach \x in{1,...,5} \draw (\x,0) node{ほげ};

としても、同じように出力してくれます。

「命令」を {  } 内に入れて、複数の命令を実行することもできます。
例えば

\foreach \x in{1,...,5} 
  {
  \draw (\x,0) node{ほげ};
  \draw[->,>=latex] (\x,0.3) to[bend left=30] (\x+0.9,0.3);
  };

とすると

となります。

変数のとり方

変数の動く範囲の集合の「…」はけっこう賢くて

\draw[step=1,very thin,gray] (0,0) grid (10.5,10.5);

\draw[->,>=stealth,semithick] (0,0)--(10.5,0) node[right]{$x$};
\draw[->,>=stealth,semithick] (0,0)--(0,10.5) node[above]{$y$};
\draw (0,0) node[below left]{O};

\foreach \n in{2,4,...,10}
  {
  \draw (\n,0) node[below]{\small $\n$}
        (0,\n) node[left]{\small $\n$}
        ;
  };

とすると、「偶数だけだな」と解釈してくれて

としてくれます。

また、変数は数でなくても構いません!
例えば、次のように「点の名前」をとることもできます。

\draw[step=1,very thin,gray] (0,0) grid (10.5,10.5);

\draw[->,>=stealth,semithick] (0,0)--(10.5,0) node[right]{$x$};
\draw[->,>=stealth,semithick] (0,0)--(0,10.5) node[above]{$y$};
\draw (0,0) node[below left]{O};

\foreach \n in{2,4,...,10}
  {
  \draw (\n,0) node[below]{\small $\n$}
        (0,\n) node[left]{\small $\n$}
        ;
  };

%%% ここまでは1つ前の例と同じ %%%

\coordinate (A) at (2,1);
\coordinate (B) at (3,8);
\coordinate (C) at (5,2);
\coordinate (D) at (7,3);
\coordinate (E) at (8,1);

\foreach \P in{A,...,E}
  {
  \fill[red] (\P) circle[radius=3pt];
  \draw[red] (\P) node[above]{\P};
  };

とすると

となります。

2変数の場合

変数を2つ設定したい場合には
 \foreach \x/\y in{集合} 命令
という形で入力します。
つまり,組 (\x, \y) を \x/\y と表現しているようです。
だから、例えば

\draw[step=1,very thin,gray] (0,0) grid (10.5,10.5);

\draw[->,>=stealth,semithick] (0,0)--(10.5,0) node[right]{$x$};
\draw[->,>=stealth,semithick] (0,0)--(0,10.5) node[above]{$y$};
\draw (0,0) node[below left]{O};

\foreach \n in{2,4,...,10}
  {
  \draw (\n,0) node[below]{\small $\n$}
        (0,\n) node[left]{\small $\n$}
        ;
  };

%%% ここまで上の例と同じ %%%

\foreach \x/\y in{2/1,3/8,5/2,7/3,8/1} \fill (\x,\y) circle[radius=3pt];

とすることで,点 (\x, \y) を一気にプロットできて、次図のようになります。

ちなみに \foreach を重ねて

\draw[step=1,very thin,gray] (0,0) grid (10.5,10.5);

\draw[->,>=stealth,semithick] (0,0)--(10.5,0) node[right]{$x$};
\draw[->,>=stealth,semithick] (0,0)--(0,10.5) node[above]{$y$};
\draw (0,0) node[below left]{O};

\foreach \n in{2,4,...,10}
  {
  \draw (\n,0) node[below]{\small $\n$}
        (0,\n) node[left]{\small $\n$}
        ;
  };

%%% ここまで上の例と同じ %%%

\foreach \x in{1,...,10}
  \foreach \y in{1,...,10} \fill (\x,\y) circle[radius=3pt];

とすると

となります。

区分求積法の図

この \foreach を利用して、区分求積法の図を描いてみました。

ソースコードはこちら。

\begin{tikzpicture}[scale=3,samples=100]

  \foreach \k in{0.1,0.2,...,0.9,1.0}
    \filldraw[fill=black!20!] (\k-0.1,0) rectangle (\k,{pow(\k,2)});

  \draw[->,>=stealth,semithick] (-0.2,0)--(1.2,0) node[right]{$x$};
  \draw[->,>=stealth,semithick] (0,-0.2)--(0,1.5) node[left]{$y$};
  \draw (0,0) node[below left]{O}
        (1,0) node[below]{$1$}
        (0.6,0) node[below]{\footnotesize$\bunsu{k}{n}$}
        ;

  \draw[dashed,very thin] (0.5,0.36)--(0,0.36)
    node[left]{\footnotesize$\left(\bunsu{k}{n}\right)^{\hspace{-2pt}2}$};
  \draw[very thick] plot[domain=-0.2:1.2] (\x,{pow(\x,2)}) node[above]{$y=x^2$};

\end{tikzpicture}

折れ線グラフ

「統計」の授業で使えそうな「折れ線グラフ」はこんな感じ。

ソースコードはこちら。

\begin{tikzpicture}[scale=1]

\draw[step=1,very thin, gray] (0,0) grid (5.5,5.5);

\draw[->,>=stealth,semithick] (0,0)--(5.5,0) node[right]{$x$};
\draw[->,>=stealth,semithick] (0,0)--(0,5.5) node[above]{$y$};
\draw (0,0) node[below left]{O};

\foreach \x/\y in{0/2,1/3,2/0,3/4,4/1,5/2}
  {
  \coordinate (P{\x}) at (\x,\y);
  \fill (P{\x}) circle[radius=2pt];
  }
  
\foreach \x in{1,...,5}
  {
  \small
  \draw (\x,0) node[below]{$\x$}
        (0,\x) node[left]{$\x$}
        ;
  }
  
\foreach \m in{0,...,4}
  {
  \tikzmath
    {
    int \n;
    \n=\m+1;
    }
  \draw[very thick] (P{\m})--(P{\n});
  }
  
\end{tikzpicture}

最後の方の \tikzmath で「変数 \n を \m+1 で定義」して使うことが出来たとき、自分はとても気持ちよかったです(笑)

今回はここまで。参考になったでしょうか?
それでは、また、そのうちお会いしましょう!

この記事が気に入ったらサポートをしてみませんか?