
次のように 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
)。