如何在路口旁边生成标签并避免与 tikz 发生自碰撞?

如何在路口旁边生成标签并避免与 tikz 发生自碰撞?

我有一个 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}

<code>森林</code> 树

答案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}

在此处输入图片描述

相关内容