我有两个矩阵m1
和m2
如下:
m1<-matrix(sample(0:1,36,replace=TRUE),nc=6);
diag(m1)<-0
row.names(m1) <- c(paste0("X",1:6))
colnames(m1) <- c(paste0("X",1:6))
m2<-matrix(sample(0:1,36,replace=TRUE),nc=6);
diag(m2)<-0
row.names(m2) <- c(paste0("X",1:6))
colnames(m2) <- c(paste0("X",1:6))
其中值1表示相应变量之间的连接。 我可以使用像igraph这样的包轻松地为其中一个矩阵生成网络。但是,我有兴趣使用两个矩阵生成差分网络,使边缘着色。这就像是重叠两个网络,使得'green'表示m1和m2都是边缘,'blue'表示m2中但不是m1的边缘,黑色边缘表示m1中的连接但不表示m1中的连接。在R?
中是否有一些生成这种网络的命令,类似于简单重叠图的“线/点”答案 0 :(得分:0)
首先,我们从邻接矩阵创建边缘列表。我们这样做,我将它们加在一起,只有m1
中的那些边的值为1,而m2
中的值只有2,而两者的值都是3
m3<-m1+2*m2
el<-subset(as.data.frame(as.table({m3[lower.tri(m3)]<-0; m3})), Freq>0)
names(el)<-c("V1","V2","CON")
现在我们可以使用上面编码的值
在边缘创建图形对象和颜色library(igraph)
gg<-graph.data.frame(el, directed=F)
plot(gg, edge.color=c("black","blue","green")[E(gg)$CON])
这将为您提供以下情节
答案 1 :(得分:0)
library(igraph)
ml <- list(m1,m2)
gl <- lapply(ml,graph.adjacency, weighted=T)
g <- do.call("+",gl)
cols <- c("black","blue","green")
colors <- cols[as.numeric(!is.na(E(g)$weight_1)) + 2*(!is.na(E(g)$weight_2))]
set.seed(1) # for reproducible graph
plot(g, edge.color=colors)
您的矩阵m1
和m2
不对称,这意味着有向图。因此,在这种情况下,图表显示m1
具有从X2
到X4
的连接,而m2
具有从X4
到X2
的连接
此方法利用了以下事实:您可以添加图表,并且结果的边缘包含两个原始图表的属性(此处为weight_1
和weight_2
)。它还涉及权重不是0或1的可能性。