如何在R中的igraph中绘制网络度到节点大小,特征向量到x轴以及属性到y轴

时间:2019-12-18 11:24:50

标签: r igraph

我想将网络节点的大小设置为度中心,将x轴的分布设置为特征向量中心,而我将属性分配到y轴。我有以下代码:

    u <- layout_with_dh(G_Network)

Aff <- "dashed"
Inf <- "solid"
Trig <- "dotted"
edge.lty = E(G_Network)$lty <- E(G_Network)$Type

start <- ends(G_Network, es = E(G_Network), names = F) [, 1]
edge.col <- V(G_Network)$color[start]

el <- c("Magenta", "olive drab", "spring green", "coral", "golden rod", "corn flower blue", "cyan", "Brown")
V(G_Network)$color <- el[V(G_Network)$Property]

EG <- eigen_centrality(G_Network, directed = T, scale = T, weights = NULL)


plot(EG, log = "xy", x = 0:max(EG), y = V(G_Network)$Pro, pch = 19, cex = 1, edge.width = 2, edge.arrow.size = .9, vertex.label.cex = 1, vertex.label.color = "black", vertex.label.font = 2, edge.curved = .5, edge.lty = E(G_Network), vertex.size = 3*igraph::degree(G_Network, mode = "out"), edge.color = edge.col, rescale = F, layout = u*1.3)
plot()enter 

除最后一个代码块外,所有内容均运行。我该怎么办?

1 个答案:

答案 0 :(得分:0)

对于那些想要使用它的人来说,在文章的结尾处是一个易于执行的数据版本。

我将假设您要布局节点的大小和位置。
顶点大小=中心度
x轴位置=特征值中心点
y轴位置= Pro(根据您的顶点属性)

顶点大小相对简单。绘图时只需指定vertex.size参数即可。但是,顶点的度数范围为1到4,大多数为1。该值太小而不能直接用作顶点大小,因此您将需要首先缩放值。我选了一些看起来不错的东西。

VS = 6 + 5*degree(g)
plot(g, vertex.size=VS)

graph with vertex size specified

要放置节点,您需要指定布局。这只是一个n x 2矩阵,其x-y位置是您要绘制顶点的位置。同样,进行一些扩展可能会有所帮助。

x = round(10*eigen_centrality(g)$vector, 2)
y = vertex_attr(g, "Pro")
LO = cbind(x,y)
plot(g, vertex.size=VS, layout=LO)

Size and position specified

但是,我怀疑您会想要一些您未指定的东西,但获取起来稍微困难一些-带标签的轴,以便您可以从图形上读取x-y坐标。这需要更多的工作,因为默认的igraph绘图会重新缩放图形的位置,以使两个轴都在+1和-1之间运行。要保持原始比例,请使用rescale=FALSE。您必须指定x-y限制并自己添加轴。这还需要调整顶点大小。

plot(g, vertex.size=7*VS, layout=LO, rescale=F, 
    xlim=range(x), ylim=range(y))
axis(side=1, pos=min(y)-1)
axis(side=2)

Final version of graph

数据和图形创建

EL = read.table(text="Vertex.1 Vertex.2 Type
P702 P617 Trig
P617 P616 Aff
P619 P701 Inf
P212 P701 Inf
P701 P608 Aff
P701 P625 Aff
P619 P807 Trig
P623 P101 Inf
P613 P801 Inf
P619 P606 Inf
P606 P603 Aff
P602 P606 Aff
P615 P252 Inf
P603 P615 Inf
P251 P238 Aff
P604 P615 Inf
P604 P624 Inf",
header=T)

VERT = read.table(text="Vertex Property Pro
P702 7 5.0
P617 6 -4.0
P616 6 7.0
P619 7 -6.0
P701 7 6.0
P212 2 2.0
P608 6 3.0
P625 6 -5.0
P807 8 -4.0
P623 6 2.5
P101 1 1.6
P613 6 6.0
P801 8 3.0
P606 6 1.0
P603 6 -2.0
P602 6 -5.0
P615 6 4.5
P252 2 2.0
P251 2 -3.0
P238 2 2.0
P604 6 2.0
P624 6 1.0",
header=T)

g = graph_from_data_frame(EL, directed=FALSE, vertices=VERT)