有没有简单的方法来实现这种类型的图表?
显然比这整洁得多...但重要的特征是 P 的两个子项之间的连接。
答案1
该解决方案将强大的forest
软件包与angles
PGF/TikZ 库一起使用。
定义了一种特殊样式,tree angle
标记子节点和下一个同级节点之间的角度。
通过这种组合,树本身可以非常简洁地指定:
\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}
\usetikzlibrary{arrows.meta, angles}
\begin{document}
\forestset{
tree angle/.style={
tikz={\path () coordinate (A) -- (!u) coordinate (B) -- (!n) coordinate (C) pic [draw] {angle};}
}
}
\begin{forest}
for tree={
draw,
circle,
edge={-{Stealth[]}},
l sep+=7.5pt
},
[P
[Q, tree angle
[T, tree angle]
[U]
]
[R]
[S
[V]
[W, tree angle]
[X]
]
]
\end{forest}
\end{document}
答案2
您应该学习 pgfmanual(我的是 v2.10)的trees
库(第 18 节“使树生长”、“53.树库”)以及如何将节点放置在直线或曲线上(第 16.8 和 16.9 节)。
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{tikzpicture}[level distance=1.5cm, grow=down,
every node/.style={draw, circle, thin},
edge from parent/.style={-latex, thick, draw}
]
\node (P) {P}
child {node (Q) {Q}
child {node (T) {T}}
child {node (U) {U}}
}
child {node (R) {R}}
child {node (S) {S}};
\path (P) -- coordinate[midway] (PQ) (Q);
\path (P) -- coordinate[midway] (PR) (R);
\draw (PQ) to[bend right=22] (PR);
\end{tikzpicture}
\end{document}