igraph R 中的顶点标签

Chu*_*uck 7 plot r igraph

我正在使用 igraph 绘制非定向力网络。

我有一个数据框nodeslinks如下所示:

> links
  source target  value sourceID targetID
1      3      4 0.6245  1450552  1519842
2      6      8 0.5723  2607133  3051992
3      9      7 0.7150  3101536  3025831
4      0      1 0.7695   401517   425784
5      2      5 0.5535  1045501  2258363

> nodes
      name group size
1   401517     1    8
2   425784     1    8
3  1045501     1    8
4  1450552     1    8
5  1519842     1    8
6  2258363     1    8
7  2607133     1    8
8  3025831     1    8
9  3051992     1    8
10 3101536     1    8
Run Code Online (Sandbox Code Playgroud)

我使用igraph如下方式绘制这些:

gg <- graph.data.frame(links,directed=FALSE)
plot(gg, vertex.color = 'lightblue', edge.label=links$value, vertex.size=1, edge.color="darkgreen", 
     vertex.label.font=1, edge.label.font =1, edge.label.cex = 1, 
     vertex.label.cex = 2 )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此图中,igraph 使用了代理索引sourcetarget作为顶点标签。

我想使用真实的 ID,在我的links表中表示为sourceIDtargetID

因此对于:

  source target  value sourceID targetID
1      3      4 0.6245  1450552  1519842
Run Code Online (Sandbox Code Playgroud)

这将显示为:

(1450552) ----- 0.6245 ----- (1519842)
Run Code Online (Sandbox Code Playgroud)

代替:

      (3) ----- 0.6245 ----- (4)
Run Code Online (Sandbox Code Playgroud)

(请注意,代理索引在数据帧中索引为零links,在nodes数据帧中索引为一。绘图需要偏移 1 igraph)。

我知道我需要以某种方式将match代理map索引到数据帧name中的对应索引nodes。但是,我很茫然,因为我不知道 igraph 绘制标签的顺序。

我怎样才能实现这个目标?

我咨询了以下问题无果:

R igraph 中的顶点标签 如何在 R 中指定顶点标签 R igraph 重命名顶点

luk*_*keA 5

您可以像这样指定标签:

 library(igraph)
gg <- graph.data.frame(
  links,directed=FALSE, 
  vertices = rbind(
    setNames(links[,c(1,4)],c("id","label")), 
    setNames(links[,c(2,5)], c("id","label"))))
plot(gg, vertex.color = 'lightblue', edge.label=links$value, 
     vertex.size=1, edge.color="darkgreen", 
     vertex.label.font=1, edge.label.font =1, edge.label.cex = 1, 
     vertex.label.cex = 2 )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

你也可以通过

merge(rbind(
    setNames(links[,c(1,4)],c("id","label")), 
    setNames(links[,c(2,5)], c("id","label"))), 
    nodes, 
    by.x="label", by.y="name")
Run Code Online (Sandbox Code Playgroud)

如果您需要其他节点属性,请添加到 vertices 参数。

数据:

 links <- read.table(header=T, text="
  source target  value sourceID targetID
1      3      4 0.6245  1450552  1519842
2      6      8 0.5723  2607133  3051992
3      9      7 0.7150  3101536  3025831
4      0      1 0.7695   401517   425784
5      2      5 0.5535  1045501  2258363")

 nodes <- read.table(header=T, text="
      name group size
1   401517     1    8
2   425784     1    8
3  1045501     1    8
4  1450552     1    8
5  1519842     1    8
6  2258363     1    8
7  2607133     1    8
8  3025831     1    8
9  3051992     1    8
10 3101536     1    8")
Run Code Online (Sandbox Code Playgroud)

  • 我接受了您的回答,因为尽管我使用了不同的方法,但我相信您的方法具有更广泛的用例并提供更多信息。再次感谢,祝你有美好的一天:) (2认同)