Me gustaría dibujar un DAG (gráfico acíclico dirigido) que crezca a la derecha, donde cada nodo esté espaciado de los otros nodos en un tamaño fijo, pero es posible que falten algunos nodos, por lo que me gustaría seguir teniendo en cuenta ese espacio. :
Por ejemplo, la distancia entre F y D debe ser la misma distancia entre A y D.
Al mismo tiempo, me gustaría trazar detrás de esto líneas de ayuda que ayuden a comprender cómo están espaciadas correctamente.
En el primer ejemplo solo encontré una manera de especificar dónde deberían estar exactamente los nodos (aunque sería ideal que se autoposicionaran)
\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}
En el segundo caso sólo encontré una manera de construir árboles, que realmente no puedo espaciar.
\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}
¿Hay alguna manera de lograr lo que quiero hacer?
Respuesta1
Elementos de código relevantes:
La biblioteca
positioning
le permite posicionar nodos en relación con otros nodos usandoabove
,below
etc. La distancia se controla con la opciónnode distance
. Para colocar los centros de los nodos a una distancia fija, necesita la opciónon grid
(de lo contrario, la distancia se mide entre los bordes de los nodos).Para hacer que los nodos cubran la cuadrícula en el fondo, utilícelo
fill=white
con los nodos.
\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}