【问题标题】:R - igraph hides edges with inverted source and sink vertexR - igraph 隐藏带有倒置源和汇顶点的边
【发布时间】:2015-04-26 21:56:14
【问题描述】:

我需要绘制一个所有边都容易发现的图(上面有标签),但是“igraph”包完全重叠了连接两个顶点的边,但不共享源和汇。

这是一个例子。我发现 layout.circle 很有用,因为我需要修复图形的顶点。

library("igraph")
Edges <- data.frame(from = c(1, 2, 2, 2, 3, 3),
                    to   = c(2, 1, 3, 3, 1, 1))
g <- graph.edgelist(as.matrix(Edges))
plot(g, layout = layout.circle(g, params = list(root = 1)), 
     edge.label = letters[1:6])

如您所见,边 #1 和 #2 完全重叠。 我尝试使用edge.curved 选项,但结果同样令人失望:

plot(g, layout = layout.circle(g, params = list(root = 1)), edge.label = letters[1:6],
 edge.curved = TRUE)

现在有两对边缘重叠,无法识别。 你知道有什么方法可以帮助我吗? 提前致谢

【问题讨论】:

  • “反转源和汇顶点”是指同一对顶点之间的相反方向的边?因为在您的图表中,这不是您所拥有的。你有两次完全相同的边缘,至少在 (2,3) 和 (1,3) 之间。这就是为什么标签最终会彼此重叠。
  • 第一个示例显示了我需要修复的问题,其中边缘 1-> 2 和 2->1 重叠。另一个例子表明 edge.curved 的解决方案不起作用。

标签: r graph igraph


【解决方案1】:

问题似乎出在edge.curved 参数上,它使用autocurve.edges 函数来计算边缘曲率。显然,这并不能正确识别您的情况。您可以选择提供自己的曲率集,因此您可以尝试以下方法:

E(g)$label <- letters[1:6]
edges_undir <- t(apply(get.edgelist(g), 1, range))
curves <- unlist(lapply( split(E(g)$label, list(edges_undir[,1], edges_undir[,2])),
                     function(x) { seq(0,.5, length.out=length(x))}))

plot(g, layout = layout.circle(g, params = list(root = 1)), edge.label=E(g)$label, 
     edge.curved = curves)

给出情节

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 2011-03-19
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多