使用 igraph 绘制不对称关系

using igraph to plot asymmetric ties

HAVE 主角 (第一列中的 ID)和 配角 的双模式邻接矩阵(列名中的 ID)。

    f1  f2  f3  f4  f5  f6  f7
f1  0   1   0   2   5   0   6
f2  0   0   3   0   0   6   0
f3  9   4   0   1   0   0   0

矩阵中的数字是片数。矩阵是不对称的。例如,f2主演了f3配角three次,f3却在f2配角four次中担任主角] 次。

我需要生成一个有向图,其中箭头从演员到支持者绘制 - arrow/arc 的大小需要与 films 的数量成正比。请参阅下面的 f2-f3 dyad 模型:

图表 "modes" 中相同的命名约定显然会导致问题。如果您有任何明确的解决方案,或者我没有很好地问我的问题(我是 igraph 和双模式投影的新手),请告诉我。谢谢!

如果您查看帮助页面 help(igraph.plotting),您会发现上面写着:

arrow.size

The size of the arrows. Currently this is a constant, so it is the same for every edge.

所以我认为不可能通过箭头的大小来实现这一点。但是,当然可以使用参数 edge.width 来改变箭头的线宽。

由于您没有提供任何数据,我提供了一个小示例,我认为您应该能够匹配您的问题。

示例数据

CoStar = matrix(c(0,1,3,1, 3,0,3,1, 2,1,0,0, 0,1,1,0), nrow=4)
CoStar
     [,1] [,2] [,3] [,4]
[1,]    0    3    2    0
[2,]    1    0    1    1
[3,]    3    3    0    1
[4,]    1    1    0    0

现在我们可以将其转换为图形对象并使用权重作为边宽来显示它。您需要使用 edge.curved 参数,以便边 A->B 不在边 B->A 的顶部。

library(igraph)
G = graph_from_adjacency_matrix(CoStar, weighted=TRUE)
V(G)$label = c("Steve", "Sean", "Andy", "Tim")
plot(G, edge.width=E(G)$weight+1, edge.arrow.size=1.5, edge.curved=0.25)

你可以看到边的大小与权重(关节出现的数量)成正比。