当前位置: 首页 > 知识库问答 >
问题:

igr图中的顶点标签

锺玺
2023-03-14

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

我有一个包含节点链接的数据框架,如下所示:

> 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

我使用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 )

在该图上,igraph使用目标的代理索引作为顶点标签。

我想使用真正的ID,在我的链接表中表示为源ID目标ID

所以,对于:

  source target  value sourceID targetID
1      3      4 0.6245  1450552  1519842

这将表现为:

(1450552) ----- 0.6245 ----- (1519842)

而不是:

      (3) ----- 0.6245 ----- (4)

(请注意,代理索引在链接数据帧中为零索引,在节点数据帧中为一索引。此偏移量为1是绘制igraph所必需的)。

我知道我需要在节点数据帧中以某种方式匹配映射代理索引到它们相应的名称。但是,我不知道IGRAPHE打印标签的顺序,所以我很困惑。

我怎样才能做到这一点?

我咨询了以下问题,但没有结果:

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

共有3个答案

刁璞
2023-03-14

最简单的解决方案是重新排序链接的列,因为根据留档:

"如果顶点为NULL,则d的前两列用作符号边缘列表,其他列用作边缘属性。"

因此,您的代码将在运行后提供正确的输出:

links <- links[,c(4,5,3)]
钱渊
2023-03-14

看来我能够重新利用这个问题的答案来实现这一点。

r IGRAPHE-如何基于顶点id向顶点添加标签

关键是使用顶点。在plot()中标记属性,并选择节点$names的切片子集。

对于我们的索引,我们可以使用igraph中自动返回的有序默认标签。要提取这些名称,可以键入V(gg)$names

plot(gg)中,我们可以写:

vertex.label = nodes[c(as.numeric(V(gg)$name)+1),]$name
# 1 Convert to numeric
# 2 Add 1 for offset between proxy links index and nodes index
# 3 Select subset of nodes with above as row index. Return name column

作为完整的代码:

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, vertex.label = nodes[c(as.numeric(V(gg)$name)+1),]$name)

根据上述数据,得出:

万选
2023-03-14

可以按如下方式指定标签:

 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 )

你也可以通过

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")

如果需要其他节点属性,请单击“顶点”参数

数据:

 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")
 类似资料:
  • 本文向大家介绍图的顶点度,包括了图的顶点度的使用技巧和注意事项,需要的朋友参考一下 它是与顶点V相邻的顶点数。 表示法-deg(V)。 在一个具有n个顶点的简单图中,任何顶点的度为- 顶点可以与除自身以外的所有其他顶点形成边。因此,顶点的度数将取决于图中的顶点数减去1。此1用于自顶点,因为它本身无法形成循环。如果任何一个顶点处都有一个循环,则它不是简单图。 可以在两种情况下考虑顶点度- 无向图 有

  • 本文向大家介绍图的边和顶点,包括了图的边和顶点的使用技巧和注意事项,需要的朋友参考一下 图是一组称为节点或顶点的点,它们由一组称为edge的线互连。图形或图形理论的研究是数学,工程学和计算机科学领域中许多学科的重要组成部分。 图论 定义-图形(表示为G =(V,E))由一组非空的顶点或节点V和一组边缘E组成。顶点a 表示边缘的端点。一条边连接两个顶点a,b ,并由其连接的一组顶点表示。 示例-让我

  • 我试图在Python中提出一种贪婪的算法,该算法在给定某个起始顶点的情况下返回无向图中的顶点。我知道DFS确定是否存在循环,但我正在尝试实际返回形成循环的顶点。我使用邻接矩阵来表示下图: 从图学上讲,这是一个由单个循环组成的无向图。 我当前的思想过程是将起始索引设置为我遇到的第一个<code>1)。然后我会查看行的其余部分,看看是否有另一个<code>1</code>存在,因为这意味着我的当前顶点

  • 我有一个igraph,其中每个顶点都有一个顶点ID和一个名称。我希望顶点仍然由它们的顶点ID标识,但由它们的名称标记。这看起来像是通过V(g)$label向顶点添加标签 我希望能够指定哪个顶点是A,哪个是B,等等-即115是A,112是B...

  • 图的变换有什么算法或名称吗?可以把边变换成顶点,顶点变换成边?这样我们就可以得到一个新的图形或者类似的问题?我不确定这是否真的有意义,但我会很高兴,如果你能给我任何关于这样一个问题的提示。