如何从二进制矩阵绘制关系图

时间:2020-07-04 19:38:47

标签: r matrix binary

我正在尝试创建一个与9/11攻击所涉及的人员之间的关系的图表,但是我不太了解所输入的内容。我使用循环对劫机者进行分组(hijacker1知道hijacker2; hijacker5知道hijacker3等),但这对我不起作用。

我的工作结果应该是以下页面上的关系图LINK

我使用的是 csv格式的数据:Data to download

数据架构如下图所示。共有三个文件,但是如果我正确理解要获取的文件,那么第一个文件(?)中的数据就足够了
Hijackers ASSOCIATES
Hijackers ATTR
Hijackers PRIORITY_CONTACT

       Hname1  HName2  HName3
HName1    0       1       0
HName2    1       0       1
HName3    0       1       0
...

我想绘制一个关系图并提取有关哪个劫机者关系最多的信息(我应该使用betweenness()库中的igraph吗?)。

1 个答案:

答案 0 :(得分:1)

这里是igraph的一种方法:

首先,让我们获取数据并将其放入邻接矩阵:

temp <- tempfile(fileext = ".zip")
download.file("https://sites.google.com/site/ucinetsoftware/datasets/covert-networks/911hijackers/9%2011%20Hijackers%20CSV.zip?attredirects=0&d=1",
              temp,
              mode = "wb")
data <- read.csv(unz(temp,"CSV/9_11_HIJACKERS_ASSOCIATES.csv"))

my.rownames <- data$X
data2 <- sapply(data[,-1], as.numeric)
rownames(data2) <- my.rownames
Adj <- as.matrix(data2)

现在简单的部分。我们可以将邻接矩阵转换为igraph图,计算顶点度并将该数据添加到图中。

library(igraph)
Graph <- graph_from_adjacency_matrix(Adj)

V(Graph)$vertex_degree <-  degree(Graph)

最后,我们可以绘制出顶点大小与度成比例的图形:

plot.igraph(Graph,
            vertex.size = V(Graph)$vertex_degree,
            layout=layout.fruchterman.reingold, main="Hijacker Relationships")

enter image description here