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가지 방법을 컴파일했습니다. 하나는 귀하의 방법을 수정한 것이고 다른 하나는 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}

보시다시피 직사각형을 그리고 원하는 색상으로 채우면 됩니다.

고정코드

확인해야 할 것은 올바른 배치와 올바른 크기입니다. A에는 node일반적으로 텍스트 채우기와 관련된 공간이 있습니다. 이 공간은 텍스트에 비해 그림이 너무 빡빡하지 않도록 하기 위한 것입니다. 다음 두 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필요한 것입니다.)

관련 정보