igraph或ggnet2

时间:2018-01-21 00:55:04

标签: r tree igraph

我正在尝试使用igraphggnet2从维基百科重现概率树图,如下所示。以下是我的开始,

library(igraph)
g <- graph.tree(2^4-1, 2)

library(GGally)
ggnet2(g, label = TRUE, label.size = 3)

随机放置节点,用数字标记它们,边缘没有标签:

enter image description here

相反,我需要重新组织和标记边和节点,除非将节点标签放在圆圈内:

enter image description here

1 个答案:

答案 0 :(得分:2)

这是我的解决方案:

library(igraph)

g <- graph.tree(n = 2 ^ 3 - 1, children = 2)
node_labels <- c("", "P(A)", "P(A')", "P(AB)", "P(AB')", "P(A'B)", "P(A'B')")
edge_labels <- c("P(A)", "P(A')", "P(B|A)", "P(B'|A)", "P(B|A')", "P(B'|A')")

layout <- layout.reingold.tilford(g)
layout <- -layout[,2:1]                    # rotate layout using negative and 
                                        # reverse columns of default
plot(g,
     layout = layout,                   # draw graph as tree
     vertex.size = 25,                  # node size
     vertex.color = '#C4D8E2',          # node color
     vertex.label = node_labels,        # node labels
     vertex.label.cex = .5,             # node label size
     vertex.label.family = "Helvetica", # node label family
     vertex.label.font = 2,             # node label type (bold)
     vertex.label.color = '#000000',    # node label size
     edge.label = edge_labels,          # edge labels
     edge.label.cex = .7,               # edge label size
     edge.label.family = "Helvetica",   # edge label family
     edge.label.font = 2,               # edge label font type (bold)
     edge.label.color = '#000000',      # edge label color
     edge.arrow.size = .5,              # arrow size
     edge.arrow.width = .5              # arrow width
) 

这给了我这个,

Horizontal Probability tree