使用igraph绘制不对称关系

时间:2018-09-11 23:43:42

标签: r igraph data-manipulation adjacency-matrix sna

HAVE是由主角演员(在第一列中标识)和支持者(列名称中的标识)组成的两种模式的邻接矩阵。

    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在电影中扮演主角 3 次,但是f3在电影中领导电影f2支撑了四次

我需要生成一个有向图,其中从参与者到支持者绘制箭头-箭头/弧的大小必须与films的数量成比例。请参见下面的f2-f3 dyad模型:enter image description here

在图的两个“模式”中相同的命名约定显然会引起问题。让我知道您是否有明确的解决方案,或者我问的不是很好(我是igraph和双模投影的新手)。谢谢!

1 个答案:

答案 0 :(得分:2)

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

  

arrow.size

     

箭头的大小。目前这是一个常数,所以它   每个边缘都是相同的。

因此,我认为不可能通过箭头的大小来完成此操作。但是,当然可以使用参数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)

Asymmetric graph

您会看到边缘尺寸与权重(关节出现的数量)成正比。