在 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功能。有時您需要節點的座標,如果不需要,通常需要「手動」完成(更少的程式碼)。

我在這裡編譯了兩種方法,一種是糾正你的方法,另一種不使用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}

正如您所看到的,您只需繪製一個矩形並用您選擇的顏色填充它。

固定程式碼

您需要確保正確的放置和正確的尺寸。 Anode通常有一些與文字填充相關的空格。這個空間是為了確保繪圖與文字相比不會太緊,比較以下兩張tikz圖:

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

因此我補充說,您不需要任何outer sep,但保留一個inner sep具有您的節點大小的。接下來是您node根據其大小放置的能力。這anchor是你的朋友,它基本上告訴我們節點是否應該放置在將節點錨定在節點內座標的座標處。嘗試例如並更改anchor=centeranchor=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需要的原因。)

相關內容