r - 使用 igraph 绘制不对称关系
问题描述
HAVE
是主角(第 1 列中的 ids)和支持者(列名中的 ids )的双模邻接矩阵。
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 支持4次的电影中担任主角。
我需要生成一个有向图,其中箭头从演员到支持者 - 箭头/弧的大小需要与films
. 请参阅下面的 f2-f3 dyad 模型:
图的两种“模式”中相同的命名约定显然会导致问题。如果您有任何明确的解决方案,或者我没有很好地提出我的问题,请告诉我(我是 igraph 和双模投影的新手)。谢谢!
解决方案
如果您查看帮助页面help(igraph.plotting)
,您会发现它说:
箭头大小
箭头的大小。目前这是一个常数,因此对于每个边缘都是相同的。
所以我认为通过箭头的大小是不可能做到这一点的。但是,当然可以使用参数来改变箭头的线宽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)
您可以看到边缘大小与权重(关节出现次数)成正比。
推荐阅读
- python - Django - 如果存在则更新数据库项,如果不存在则插入
- vba - 如何将 3 个 VBA 子程序合二为一?
- jquery - 如何在 URL 路径的开头插入文本/路径
- python - 长类型的较短类型提示
- power-automate - 避免不必要的应用到每个
- r - 如何概括一个函数,以便在不更改参数的情况下传递任何数据集?
- crc - #SOLVED - MODBUS(RTU 模式)CRC 计算...怎么了?是不是 DPS5020 用户手册的印刷错误?
- html - 将 3 个图像与文本对齐
- python - Python如何在特定行之后开始读取文件到特定行?
- oracle - Oracle:将时间范围拆分为天并计算持续时间