DAG al que le faltan nodos y líneas de ayuda

DAG al que le faltan nodos y líneas de ayuda

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.

ingrese la descripción de la imagen aquí

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.

ingrese la descripción de la imagen aquí

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 positioningle permite posicionar nodos en relación con otros nodos usando above, belowetc. La distancia se controla con la opción node distance. Para colocar los centros de los nodos a una distancia fija, necesita la opción on 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=whitecon los nodos.

ingrese la descripción de la imagen aquí

\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}

información relacionada