我有一个 ASCII 艺术系统发育树,其部分内容如下
/------ PLN
/-----+ 0.9
| \------ IL1
/--------+ 1.8
| | /----- PVD
| \------+ 0.8
| \----- URYD
--+ 3.1
| /----- PHB
| /--+ 0.7
| | \----- FLP
\-------------+ 0.8
\----- PQR
我认为我理解如何使用level distance
子节点上的命令来获得分支两侧的不同深度,以及grow right
如何使用命令让树处于正确的方向,但我能否让数字显示在这里——在连接节点的右侧?这些应该是某种样式的节点的文本,还是无文本节点上的标签,或者……?
此外,如此处所示,子树彼此不同且不对称。此时,我是否最好只手工绘制节点而不使用任何树,或者是否有有效的方法来避免碰撞?
答案1
forest
提供了一个label
可用于此目的的选项,它使用非常紧凑的代码创建了一个非常整洁的树。我不确定树应该是什么样子,所以这可能不太正确,但它可以相当容易地进行修改。
\documentclass[tikz, border=5pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
/tikz/label position=right,
/tikz/label distance=.5em,
for tree={
grow=0,
align=left,
parent anchor=east,
child anchor=west,
anchor=west,
before typesetting nodes={
if content={}{
shape=coordinate}{}
},
edge path={
\noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) -- +(5pt,0) |- (.child anchor)\forestoption{edge label};
},
if n children=2{
for children={
edge={rounded corners},
},
}{}
}
[,
[, label=3.1
[, label=0.8
[PQR]
[, label=0.7
[FLP]
[PHB]
]
]
[, label=1.8
[, label=0.8
[URYD]
[PVD]
]
[, label=0.9
[IL1]
[PLN]
]
]
]
]
\end{forest}
\end{document}
答案2
无文本节点似乎是最简单的想法。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[edge from parent path={
(\tikzparentnode.east) -- ++ (2mm,0) [rounded corners] |- (\tikzchildnode.west)
}
]
\node (root) {} [grow=right]
child
child {
child {coordinate (special)}
child
};
\node[label={[inner sep=1mm]0:Label}] at (root-2) {};
\end{tikzpicture}
\end{document}