如何在R上绘制具有不同边类型的网络?

时间:2018-06-21 16:10:26

标签: r igraph graph-visualization

我想绘制一个定向加权网络,可以在其中显示参与者之间的股票交易。我不确定是否可以在igraph R包的边缘列表中添加第三列(“ TYPE”)。如果是这样,我们可以根据购买的存货区分边缘吗? 例如苹果:蓝色边缘,谷歌:红色边缘,辉瑞:橙色边缘。

边缘列表

FROM TO VALUE TYPE
A    B  100   Apple
B    C  50    Pfizer
C    D  80    Apple
A    E  70    Google

    require(igraph)
test<-as.matrix(edge_list_test)
test[,1]<-as.character(test[,1])
test[,2]<-as.character(test[,2])
test[,4]<-as.character(test[,4])
g<-graph.edgelist(test[,1:2], directed=TRUE)
V(g)$size=degree(g)
E(g)$type=as.character(test[,4])
E(g)$weight=as.numeric(test[,3])
    plot(g, layout=layout.fruchterman.reingold, edge.width=E(g)$weight, vertex.color=V(g)$type, vertex.label.dist=0.5)][1]][1]

为什么边缘是灰色的,而基于“ TYPE”,边缘却看不到不同的颜色?

enter image description here

1 个答案:

答案 0 :(得分:0)

当我按照提供的方式运行您的代码时,我会得到大的箭头,因此我将调整edge.width。 plot语句中的任何内容都不会设置边缘颜色。您需要使用edge.color参数明确地执行此操作。

CR = rainbow(length(unique(edge_list_test$TYPE)))
plot(g, layout=layout.fruchterman.reingold, 
    edge.width=E(g)$weight/15, vertex.color=V(g)$type, 
    vertex.label.dist=0.5, edge.color=CR[edge_list_test$TYPE])
legend("topleft", legend=levels(edge_list_test$TYPE), lwd=2, col=CR)

Colored Arrows

我使用edge_list_test$TYPE而不是E(g)$type选择边缘颜色,因为edge_list_test$TYPE是一个因素,而E(g)$type只是一个字符串。