
Ich versuche, in TikZ ein 10x10-Raster wie folgt zu zeichnen:
\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}
Das kommt dem, was ich mir vorgestellt habe, schon ziemlich nahe, aber die Knoten sind nicht richtig ausgerichtet. Was mache ich falsch? Hier ist ein Bild meiner Ausgabe:
.
Da ich bei TikZ neu bin, können Sie den Code auch gerne hinsichtlich der Lesbarkeit, der Codierpraktiken usw. kommentieren.
Antwort1
Sie sollten diese Funktion nicht immer verwenden node
. Manchmal benötigen Sie die Koordinaten des Knotens. Wenn nicht, lohnt es sich oft, dies „manuell“ zu tun (weniger Code).
Ich habe hier zwei Methoden zusammengestellt, eine, bei der Ihr Code korrigiert wird, und die andere ohne die Verwendung von nodes
. Ich bevorzuge die Methode ohne Knoten, da sie sauberer zeichnet, aber jeder kann seinen eigenen Stil bevorzugen!
Ohnenode
\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}
Wie Sie sehen, zeichnen Sie einfach ein Rechteck und füllen es mit der Farbe Ihrer Wahl.
Fester Code
Sie müssen auf die richtige Platzierung und die richtige Größe achten. node
Normalerweise ist etwas Platz vorhanden, der mit der Füllung des Textes zusammenhängt. Dieser Platz soll sicherstellen, dass die Zeichnung im Vergleich zum Text nicht zu eng ist. Vergleichen Sie die folgenden beiden tikz
Zeichnungen:
\tikz \node[draw,inner sep=0pt,outer sep=0pt] {H};
\tikz \node[draw] {H};
Daher habe ich hinzugefügt, dass Sie keine wollen outer sep
, sondern ein behalten inner sep
, das die Größe Ihres Knotens hat. Als nächstes haben Sie die Möglichkeit, das node
in Bezug auf seine Größe zu platzieren. Hier anchor
ist Ihr Freund, er sagt im Grunde, ob der Knoten an der Koordinate platziert werden soll, indem der Knoten an der Koordinate innerhalb des Knotens verankert wird. Versuchen Sie es beispielsweise und ändern Sie anchor=center
in anchor=east
. Mit anchor=center
nimmt es die Mittelkoordinate im Knoten und platziert an der von Ihnen angegebenen Koordinate. Mit anchor=east
nimmt es den Ostpunkt des Knotens und platziert an der Koordinate. Es ist im folgenden Beispiel strenggenommen nicht erforderlich, gibt aber eine gute Vorstellung davon, was es tut (und es istSEHRnützlich)
\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}
Ich hoffe, dies bringt Sie in die richtige Richtung.
Farben intikz
Beim Definieren neuer Farben können Sie den Schritt zum Definieren von Farben auch überspringen:
\pgfmathparse{70*rnd+30}
\edef\tmp{\pgfmathresult}
\node[fill=white!\tmp!black] ...
In diesem Fall überspringen Sie das \definecolor
und müssen sich darüber keine Gedanken machen. In diesem Fall sollte die Zahl zwischen 0 und 100 liegen. Darüber hinaus benötigen Sie den \edef
Schritt, um dieses Ergebnis beizubehalten. Es wird viel Mathematik darin ausgeführt, tikz
daher müssen Sie die mathematische Variable vorübergehend speichern (weshalb dies \edef
erforderlich ist).