我正在用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中的顶点标签重命名顶点
最简单的解决方案是重新排序链接
的列,因为根据留档:
"如果顶点为NULL,则d的前两列用作符号边缘列表,其他列用作边缘属性。"
因此,您的代码将在运行后提供正确的输出:
links <- links[,c(4,5,3)]
看来我能够重新利用这个问题的答案来实现这一点。
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)
根据上述数据,得出:
可以按如下方式指定标签:
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...
图的变换有什么算法或名称吗?可以把边变换成顶点,顶点变换成边?这样我们就可以得到一个新的图形或者类似的问题?我不确定这是否真的有意义,但我会很高兴,如果你能给我任何关于这样一个问题的提示。