问题描述
所以这个问题已经被问到 here 和 here...但我似乎无法适应我的问题。我正在尝试使用 R 中的 igraph
包创建一个二部图,看起来像这样:
我用来尝试这个的代码是:
# create all pairs and turn into vector for graph edges
pairs <- expand.grid(1:6,1:6) # create all pairs
pairs <- pairs[!pairs$Var1 == pairs$Var2,] # remove matching rows
ed <- as.vector(t(pairs)) # turn into vecotr
# create graph
g <- make_empty_graph(n = 6)
g <- add_edges(graph = g,edges = ed)
plot(g)
这将创建一个图形...但我试图使它类似于图像中的图形,例如,顶部为 (1,2,3),底部为 (4,5,6) .
我尝试使用 make_bipartite_graph()
和 layout_as_bipartite
...但我似乎无法让它工作...有什么建议吗?
解决方法
如果图是直接从 data.frame 创建的,它就不是二部图。
library(igraph)
g <- graph_from_data_frame(df)
is.bipartite(g)
#[1] FALSE
但如果从关联矩阵创建,它将是一个二部图。
tdf <- table(df)
g <- graph.incidence(tdf,weighted = TRUE)
is.bipartite(g)
#[1] TRUE
现在绘制它。
colrs <- c("green","cyan")[V(g)$type + 1L]
plot(g,vertex.color = colrs,layout = layout_as_bipartite)