如何以图形方式在 R 中显示一棵简单的树

How to display a simple tree in R graphically

我有这样的数据:

in  out
1   3
2   3

这表示以下树结构:

    1     2
      \ /
       3

每棵树都将包含像这棵树一样的子树,有 2 个源 (in) 和一个目的地 (out)。稍微复杂一点的树是:

in  out
1   3
2   3
3   5
4   5

代表这棵树:

    1    2
      \ /
       3    4
        \ /
         5

因此,每棵树的顶部将恰好包含 2 个节点,而底部将恰好包含 1 个节点,中间的每一层将恰好包含 2 个节点。可以有很多层次。最后一个例子:

in  out
1   3
2   3
3   5
4   5
5   7
6   7

代表这棵树:

    1    2                     level 1
      \ /
       3    4                  level 2
        \ /
         5    6                level 3
          \ /
           7                   level 4

我怎样才能以一种漂亮的方式绘制这些树?我不能使用 ggtree 因为我必须使用的 R 版本不支持它。我看过 igraphgraph.tree,但到目前为止还不知道该怎么做。

如果这很重要,我很乐意将其与我在上面显示的树木或从左到右的方式颠倒绘制。

输入是一个边列表,因此我们可以将其转换为 igraph 对象,然后使用指示的布局绘制它。 lay 是一个给出顶点坐标的双列矩阵,涉及 lay 的矩阵乘法否定它的第二列,从而翻转它。

library(igraph)

DF <- data.frame(in. = 1:6, out. = c(3, 3, 5, 5, 7, 7)) # input

g <- graph_from_edgelist(as.matrix(DF[2:1]))
lay <- layout_as_tree(g)
plot(as.undirected(g), layout = lay %*% diag(c(1, -1)))