DAG с отсутствующими узлами и линиями помощи

DAG с отсутствующими узлами и линиями помощи

Я хотел бы нарисовать DAG (направленный ациклический граф), который растет справа, где каждый узел отстоит от других узлов на фиксированный размер, но иногда узлы могут отсутствовать, поэтому я хотел бы все равно учитывать это пространство:

Например, расстояние между F и D должно быть таким же, как и расстояние между A и D.

введите описание изображения здесь

В то же время я хотел бы построить позади него вспомогательные линии, которые помогут понять, как они правильно расположены.

введите описание изображения здесь

В первом примере я нашел только способ указать, где именно должны находиться узлы (хотя вместо этого было бы идеально, чтобы они автоматически позиционировались)

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

Во втором случае я нашел только способ построения деревьев, которые я не могу толком разнести

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

Есть ли способ добиться того, чего я хочу?

решение1

Соответствующие элементы кода:

  • Библиотека positioningпозволяет вам позиционировать узлы относительно других узлов с помощью aboveи belowт. д. Расстояние контролируется с помощью опции node distance. Чтобы разместить центры узлов на фиксированном расстоянии, вам нужна опция on grid(в противном случае расстояние измеряется между границами узлов).

  • Чтобы узлы закрывали сетку на заднем плане, используйте fill=whiteс узлами.

введите описание изображения здесь

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

Связанный контент