跨层级

跨层级

如果您能告诉我绘制交叉层次结构最优雅的方法(如下所示),我将不胜感激:

    X
   /\
  Y  Z
  /\/\
 p q  t

q 有两个父母 Y 和 Z。

答案1

这是一种 hack,因为它利用了节点之间的距离在各个级别之间不会改变的事实,因此默认情况下分支会重叠:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node {X} 
   child {
     node {Y}
     child {
        node {p}
     }
     child {
        node {q}
     }
   }
   child {
      node {Z}      
      child {
         node {\phantom{q}}      
      }
      child {
         node {t}      
      }
   }
;
\end{tikzpicture}
\end{document}

示例输出

从 Z 到 q 的边实际上并不是到 q 的边,而是到位于第一个 q 之上的不可见的 q 的边。

更好的方法是命名节点并在树后绘制额外的边。这样,如果 q 节点移动,额外的边仍将指向它。您可以创建一个missing子节点来保持间距,就像实际有第一个子节点一样。

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
   level 1/.style={sibling distance=20mm},
   level 2/.style={sibling distance=15mm}
]
\node {X} 
   child {
     node {Y}
     child {
        node {p}
     }
     child {
        node (q) {q}
     }
   }
   child {
      node (Z) {Z}      
      child[missing] {
         node {q}
      }
      child {
         node {t}      
      }
   }
;
\draw (Z) -- (q);
\end{tikzpicture}
\end{document}

示例输出

相关内容