DAG com nós e linhas de ajuda ausentes

DAG com nós e linhas de ajuda ausentes

Eu gostaria de desenhar um DAG (gráfico acíclico direcionado) que cresce à direita, onde cada nó é espaçado dos outros nós em um tamanho fixo, mas alguns nós de tempo podem estar faltando, então eu gostaria de ainda contabilizar esse espaço :

Por exemplo, a distância entre F e D deve ser a mesma distância de A e D.

insira a descrição da imagem aqui

Ao mesmo tempo, gostaria de traçar atrás dele linhas de ajuda que ajudem a entender como elas estão corretamente espaçadas

insira a descrição da imagem aqui

No primeiro exemplo, encontrei apenas uma maneira de especificar onde exatamente os nós deveriam estar (embora, em vez disso, seria ideal para eles se posicionarem automaticamente)

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

No segundo caso, só encontrei uma maneira de construir árvores - que não consigo espaçar

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

Existe uma maneira de conseguir o que quero fazer?

Responder1

Elementos de código relevantes:

  • A biblioteca positioningpermite posicionar nós em relação a outros nós usando above, belowetc. A distância é controlada com a opção node distance. Para colocar os centros dos nós a uma distância fixa, você precisa da opção on grid(caso contrário, a distância é medida entre as bordas dos nós).

  • Para fazer com que os nós cubram a grade em segundo plano, use fill=whitecom os nós.

insira a descrição da imagem aqui

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

informação relacionada