我想合并具有完全相同节点的两个网络。在合并网络中,我想绘制不同原始网络中不同颜色的边缘。以下是我使用igraph和我遇到的问题所做的事情:
我首先将名称设置为两个原始图形,并将类型设置为边缘。
g1 = set.graph.attribute(g1, "name", “AA”)
E(g1)$type = “A”
g2 = set.graph.attribute(g2, "name", “BB”)
E(g2)$type = “B”
然后,我统一了两张图。
g = graph.union(g1, g2, byname=TRUE)
我收到了一个错误:
.igraph.graph.union.or.intersection(“R_igraph_union”,...,byname = byname,: 有些图表未命名
事实上,两个原始图都被命名。这里的错误有点奇怪。我继续使用以下代码。现在它有效。
g = graph.union(g1, g2, byname="auto")
这些是我得到的一些结果:
E(g1)
边缘序列: 1 5 - 1 [2] 6 - 1 [3] 4 - 2 [4] 6 - 5
E(g2)
边缘序列: 1 3 - 2 [2] 6 - 2 [3] 5 - 4 [4] 6 - 4 [5] 6 - 5
E(g)
边缘序列: 1 6 - 5 [2] 6 - 4 [3] 5 - 4 [4] 6 - 2 [5] 4 - 2 [6] 3 - 2 [7] 6 - 1 [8] 5 - 1
E(g1)$type
1“A”“A”“A”“A”
E(g2)$type
1“B”“B”“B”“B”“B”
E(g)$type_1
1“A”NA NA NA“A”NA“A”“A”
E(g)$type_2
1“B”“B”“B”“B”NA“B”NA NA
我尝试使用以下代码绘制红色类型为“A”的边缘,蓝色类型为“B”的边缘。
plot(g, edge.color=ifelse(E(g)$type_1=="A","red","blue"))
它只是用“B”类型绘制边缘。为什么它用“A”型绘制边缘?这些代码有什么问题?
我也很好奇是否有办法将联合图的edge属性的名称保持为“type”。在这里,它会自动将名称更改为“type_1”和“type_2”,这两个属性。如果保留名称,一些边将是“A”类型,来自“B”,有些将是“A”和“B”(例如在这种情况下为边缘5 - 6)。这可能会更容易以不同的颜色绘制边缘。
任何帮助将不胜感激。提前谢谢!