Ich möchte einen DAG (gerichteten azyklischen Graphen) zeichnen, der nach rechts wächst, wobei jeder Knoten einen festen Abstand zu den anderen Knoten hat. Manchmal können jedoch Knoten fehlen, sodass ich diesen Abstand dennoch berücksichtigen möchte:
Beispielsweise sollte der Abstand zwischen F und D dem Abstand zwischen A und D entsprechen.
Gleichzeitig möchte ich dahinter Hilfslinien einzeichnen, die dabei helfen, zu verstehen, wie sie richtig angeordnet werden
Im ersten Beispiel habe ich nur eine Möglichkeit gefunden, anzugeben, wo genau die Knoten sein sollen (ideal wäre jedoch eine automatische Positionierung).
\begin{tikzpicture}[
grow=right,
level distance=200mm,
sibling distance=105mm]
\node[shape=circle,draw=black] (A) at (0, 0){A};
\node[shape=circle,draw=black] (B) at (1,-1) {B};
\node[shape=circle,draw=black] (C) at (1,1) {C};
\node[shape=circle,draw=black] (D) at (2,0) {D};
\node[shape=circle,draw=black] (F) at (4,0) {F} ;
\path [<-](A) edge node[right] {} (B);
\path [<-](A) edge node[right] {} (C);
\path [<-](B) edge node[right] {} (D);
\path [<-](C) edge node[right] {} (D);
\path [<-](D) edge node[right] {} (F);
\end{tikzpicture}
Im zweiten Fall habe ich nur eine Möglichkeit gefunden, Bäume zu konstruieren - die ich nicht wirklich ausbreiten kann
\begin{tikzpicture}[
grow=right,
level distance=20mm,
sibling distance=10mm,
every node/.style={draw=black,border=1mm,circle,inner sep=5pt}
]
\draw [help lines, dashed,ystep=5, xstep=2] (0,0) grid(15, 5);
\node {0}
child { node {1} }
child { node {2}
child { node {3}
child { node {4} }
child { node {5} }
child { node {6} } }
child { node {7} } };
;
\end{tikzpicture}
Gibt es eine Möglichkeit, das zu erreichen, was ich möchte?
Antwort1
Relevante Codeelemente:
Die Bibliothek
positioning
ermöglicht es Ihnen, Knoten relativ zu anderen Knoten zu positionierenabove
, indem Siebelow
usw. verwenden. Der Abstand wird mit der Option gesteuertnode distance
. Um die Mittelpunkte der Knoten in einem festen Abstand zu platzieren, benötigen Sie die Optionon grid
(andernfalls wird der Abstand zwischen den Rändern der Knoten gemessen).Damit die Knoten das Raster im Hintergrund abdecken, verwenden Sie es
fill=white
mit den Knoten.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}%
[vertex/.style={circle,draw=black,fill=white},
node distance=2cm,
on grid,
>=latex
]
\draw[gray!50] (-1,-2) grid (5,2);
\node[vertex] (A) {A};
\node[vertex,above right=1cm and 1cm of A] (B) {B};
\node[vertex,below=of B] (C) {C};
\node[vertex,right=of A] (D) {D};
\node[vertex,right=of D] (F) {F};
\draw[->]
(C) edge (A)
(B) edge (A)
(D) edge (C)
(D) edge (B)
(F) edge (D);
\end{tikzpicture}
\end{document}