如何以图形方式在 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 版本不支持它。我看过 igraph
和 graph.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)))
我有这样的数据:
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 版本不支持它。我看过 igraph
和 graph.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)))