我有一个标准的边缘清单:
[1] 1 -> 2 [2] 1 -> 3 [3] 1 -> 6 [4] 2 -> 1 [5] 2 -> 3 [6] 2 -> 4 [7] 2 -> 5
我想根据三条规则对边缘进行着色:
i)如果第一个值小于第二个值 - >蓝色
ii)如果第一个值大于第二个 - >红色
这似乎很简单:
y.ed<-as.edgelist(am.ed) z<-as.data.frame(y.ed) m<-z[,1] n<-z[,2] o<-ifelse(m<n, "red", "blue")
然而,我想iii)颜色互惠关系,即1->2
,2->1
(如上所述)另一种颜色,例如橙子。
我无法弄清楚如何做到这一点。
答案 0 :(得分:0)
在考虑了这一点之后,我想到这可能是棘手的,有人可能已经这样做了,因为网络在R
中是一个相当繁重的应用领域。在igraph
包中,如果您可以稍微重新格式化边缘列表,我找到了一种方法。以下是使用组合数据的示例:
library("igraph")
set.seed(11)
ed <- sample(1:10, 30, replace = TRUE)
g <- graph(edges = ed)
str(g)
plot(g)
m <- is.mutual(g)
然后可以使用m
中的T / F矢量根据需要为边缘着色。
请注意,在此示例中,在同一节点/顶点和重复边缘上开始和结束的边缘被函数计为“相互”。如果你有那些以及相互的边缘,你可能不得不做一些额外的摆弄。该示例具有一个倒数边(1 -3)。