TikZ でランダムな色でグリッドを描く

TikZ でランダムな色でグリッドを描く

次のように TikZ で 10x10 グリッドを描画しようとしています:

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[scale=1]
    \foreach \y in {0.05,0.15,...,0.95}
    \foreach \x in {0.05,0.15,...,0.95}
        \pgfmathparse{0.9*rnd+0.3}
        \definecolor{MyColor}{rgb}{\pgfmathresult,\pgfmathresult,\pgfmathresult}
        \node[fill=MyColor,minimum size=0.1] at (\x,\y) {}; 
    \draw[step=.1,help lines] (0,0) grid (1,1); 
    \draw[->] (0,1) -- (1.2,1);
    \draw[->] (0,1) -- (0,-0.2);
\end{tikzpicture}
\end{document}

これはすでに私が考えていたものとかなり近いのですが、ノードが適切に整列していません。何が間違っているのでしょうか? これが私の出力の画像です:

私の試み

また、私は TikZ を初めて使用するので、読みやすさやコーディング方法など、コードに関するコメントをお気軽にお寄せください。

答え1

この機能を常に使用する必要はありませんnode。ノードの座標が必要になる場合もありますが、必要ない場合は「手動で」行う方がよい場合が多くあります (コードが少なくて済みます)。

ここでは 2 つの方法をまとめました。1 つは修正したもの、もう 1 つは を使用しない方法ですnodes。ノードを使用しない方法の方が描画がきれいになるので気に入っていますが、誰でも好きなスタイルを選ぶことができます。

それなしnode

\begin{tikzpicture}[scale=1]
  \foreach \y in {0.0,0.1,...,0.9} {
      \foreach \x in {0.0,0.1,...,0.9} {
          \pgfmathparse{0.9*rnd+0.3}
          \definecolor{MyColor}{rgb}{\pgfmathresult,\pgfmathresult,\pgfmathresult}
          \path[fill=MyColor] (\x,\y) rectangle ++(0.1,0.1); 
      }
  }
  \draw[step=.1,help lines] (0,0) grid (1,1); 
  \draw[->] (0,1) -- (1.2,1);
  \draw[->] (0,1) -- (0,-0.2);
\end{tikzpicture}

ご覧のとおり、長方形を描いて、好きな色で塗りつぶすだけです。

修正コード

正しい配置と正しいサイズを確保する必要があります。node通常、テキストを埋め込むためのスペースが確保されます。このスペースは、テキストに比べて図面が狭すぎないようにするためのものです。次の 2 つのtikz図面を比較してください。

\tikz \node[draw,inner sep=0pt,outer sep=0pt] {H};
\tikz \node[draw] {H};

したがって、 は不要ですouter sepが、inner sepノードのサイズを持つ は保持されていると付け加えました。次は、 をnodeそのサイズに応じて配置する機能です。これはanchor、基本的に、ノードを 座標に配置し、ノードをノード内の 座標に固定するかどうかを示します。たとえば、anchor=centerを に変更してみてくださいanchor=east。 を使用するとanchor=center、ノード内の中心座標が取得され、指定した座標に配置されます。 を使用すると、anchor=eastノードの東点が取得され、座標に配置されます。これは、以下の例では厳密には必要ありませんが、それが何をするのかをよく理解できます(そして、とても役に立つ)

\begin{tikzpicture}[scale=1]
  \foreach \y in {0.1,0.2,...,.9} {
      \foreach \x in {0.1,0.2,...,.9} {
          \pgfmathparse{0.9*rnd+0.3}
          \definecolor{MyColor}{rgb}{\pgfmathresult,\pgfmathresult,\pgfmathresult}
          \node[fill=MyColor,inner sep=0.1cm,outer sep=0pt,anchor=center] at (\x,\y) {}; 
      }
  }
  \draw[step=.1,help lines] (0,0) grid (1,1); 
  \draw[->] (0,1) -- (1.2,1);
  \draw[->] (0,1) -- (0,-0.2);
\end{tikzpicture}

これがあなたを正しい方向に導くことを願っています。

色彩tikz

また、新しい色を定義するときに、色の定義手順をスキップすることもできます。

\pgfmathparse{70*rnd+30}
\edef\tmp{\pgfmathresult}
\node[fill=white!\tmp!black] ... 

この場合は をスキップし\definecolor、それについて心配する必要はありません。この場合、数値は 0 から 100 の間である必要があります。さらに、\edefその結​​果を保持するには ステップが必要です。 では多くの計算が実行されるtikzため、数学変数を一時的に保存する必要があります (これが が必要な理由です\edef)。

関連情報