如何使用 igraph 选择两种模式的布局并避免重叠?

How to choose layout for two-modes using igraph and avoid overlapping?

我需要绘制的数据集非常大并且是双模的。一个是关于学生的,另一个是关于他们共享的项目的。

我使用 igraph 并尝试了几种布局。 None 其中令人满意。 kk 的布局信息量相对较大。这是它的样子:

绿色和大的是项目,小的和粉红色的是学生。

我想给它们贴上标签,以便获得更多信息。但是情节是如此激烈并且有很多重叠。其他布局会更糟。

有人可以帮忙吗?比如如何避免重叠?如何添加标签,不需要全部,但至少需要一些中心?

这是我的代码:

net <- graph_from_incidence_matrix(links)
V(net)$color[1:2621] <- rgb(1,0,0,.5)
V(net)$color[2622:4326] <- rgb(0,1,0,.5)
V(net)$label <- V(net)$name
V(net)$label.color <- rgb(0,0,.2,.5)
V(net)$label[1:2621] <- NA
V(net)$color[1:2621] <-  rgb(1,0,0,.1)
V(net)$size[1:2621] <- 3
V(net)$size[2621:4326] <- 5
E(net)$curved <- FALSE
l1 <- layout_with_kk(net)
plot(net, layout=l1,vertex.label=NA,edge.width =E(net)$weight)

如果您知道要显示哪些标签,您可以分配 vertex.label 一个矢量,指定这些标签。

此外,删除正在通过 vertex.frame.color 更改节点边框的颜色可能会有用。

例如:

 r <- make_ring(10)
 showlabels <- seq(1,10)
 showlabels[showlabels %% 2 != 0] <- NA 
 plot(r, vertex.label = showlabels, vertex.frame.color = NA)