我正在尝试使用igraph
和ggnet2
从维基百科重现概率树图,如下所示。以下是我的开始,
library(igraph)
g <- graph.tree(2^4-1, 2)
library(GGally)
ggnet2(g, label = TRUE, label.size = 3)
随机放置节点,用数字标记它们,边缘没有标签:
相反,我需要重新组织和标记边和节点,除非将节点标签放在圆圈内:
答案 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
)
这给了我这个,