누락된 노드와 도움말 라인이 있는 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}

관련 정보