在 R 中创建二部图?

问题描述

所以这个问题已经被问到 herehere...但我似乎无法适应我的问题。我正在尝试使用 R 中的 igraph 包创建一个二部图,看起来像这样:

graph

我用来尝试这个的代码是:

# 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)

enter image description here