如何在 R 中使用 igraph select 一个图顶点?
How to select a graph vertex with igraph in R?
在 Python 中,您可以简单地使用 graph.select() (至少在阅读文档时:https://igraph.org/python/doc/api/igraph.VertexSeq.html)到 select 基于值的顶点。我有一个连接共享演员的电影的巨大图表。但是我只想从该图中 select 一个顶点,然后用它的直接邻居绘制它。当我只想 select 那个单个顶点时,我 运行 遇到了问题。
我曾希望类似的东西能奏效
graph.movies.select('Snatch (2000)')
但运气不好。
我采用的另一种方法是通过过滤掉所有其他顶点然后添加边来获取单个 Snatch 顶点。
snatch.graph <- induced.subgraph(g.movies, vids=V(g.movies)$name == 'Snatch (2000)')
snatch.edges <- edges(g.movies, "Snatch (2000)")
add_edges(snatch.graph, snatch.edges$edges)
然而,这 returns 是一个只有抓取顶点的空图。
我的目标是抓取 Snatch 顶点并绘制该顶点、它的直接邻居以及它们之间的边。有什么建议么?非常感谢 :D 在这上面停留了很长一段时间 -.-
您可以使用 ?ego
抓取邻居或 ?make_ego_graph
形成图表。 (根据您的图形是否有向,您可能需要使用 mode
参数)。
一个例子:
library(igraph)
# create some data
set.seed(71085002)
n = 10
g = random.graph.game(n, 0.25)
V(g)$name = seq_len(n)
# grab neighbours of node "1"
# set mindist = 0 to include node itself
# set order for the stepsize of the neigbourhood;
nb_g = make_ego_graph(g, order=1, node="1", mindist=0)[[1]]
# plot
# you could use the `layout` argument to
# keep nodes in the same position
op = par(mfrow=c(1,2), oma=rep(0,4))
plot(g, vertex.size=0, vertex.label.cex=3, main="Full graph")
plot(nb_g, vertex.size=0, vertex.label.cex=3, main="Sub graph")
par(op) # reset
如果您只需要相邻节点的列表:
ego(g, order=1, node="1", mindist=0)
# [[1]]
# + 4/10 vertices, named, from 00cfa70:
# [1] 1 4 6 9
我觉得全面高效
如果您想找到建立在直接邻居上的 sub-graph,这是另一个选项,它适用 distances
+ induced_subgraph
> induced_subgraph(g, which(distances(g, "1") <= 1))
IGRAPH 99f872b UN-- 4 3 -- Erdos renyi (gnp) graph
+ attr: name (g/c), type (g/c), loops (g/l), p (g/n), name (v/n)
+ edges from 99f872b (vertex names):
[1] 1--4 1--6 1--9
在 Python 中,您可以简单地使用 graph.select() (至少在阅读文档时:https://igraph.org/python/doc/api/igraph.VertexSeq.html)到 select 基于值的顶点。我有一个连接共享演员的电影的巨大图表。但是我只想从该图中 select 一个顶点,然后用它的直接邻居绘制它。当我只想 select 那个单个顶点时,我 运行 遇到了问题。
我曾希望类似的东西能奏效
graph.movies.select('Snatch (2000)')
但运气不好。
我采用的另一种方法是通过过滤掉所有其他顶点然后添加边来获取单个 Snatch 顶点。
snatch.graph <- induced.subgraph(g.movies, vids=V(g.movies)$name == 'Snatch (2000)')
snatch.edges <- edges(g.movies, "Snatch (2000)")
add_edges(snatch.graph, snatch.edges$edges)
然而,这 returns 是一个只有抓取顶点的空图。
我的目标是抓取 Snatch 顶点并绘制该顶点、它的直接邻居以及它们之间的边。有什么建议么?非常感谢 :D 在这上面停留了很长一段时间 -.-
您可以使用 ?ego
抓取邻居或 ?make_ego_graph
形成图表。 (根据您的图形是否有向,您可能需要使用 mode
参数)。
一个例子:
library(igraph)
# create some data
set.seed(71085002)
n = 10
g = random.graph.game(n, 0.25)
V(g)$name = seq_len(n)
# grab neighbours of node "1"
# set mindist = 0 to include node itself
# set order for the stepsize of the neigbourhood;
nb_g = make_ego_graph(g, order=1, node="1", mindist=0)[[1]]
# plot
# you could use the `layout` argument to
# keep nodes in the same position
op = par(mfrow=c(1,2), oma=rep(0,4))
plot(g, vertex.size=0, vertex.label.cex=3, main="Full graph")
plot(nb_g, vertex.size=0, vertex.label.cex=3, main="Sub graph")
par(op) # reset
如果您只需要相邻节点的列表:
ego(g, order=1, node="1", mindist=0)
# [[1]]
# + 4/10 vertices, named, from 00cfa70:
# [1] 1 4 6 9
我觉得
如果您想找到建立在直接邻居上的 sub-graph,这是另一个选项,它适用 distances
+ induced_subgraph
> induced_subgraph(g, which(distances(g, "1") <= 1))
IGRAPH 99f872b UN-- 4 3 -- Erdos renyi (gnp) graph
+ attr: name (g/c), type (g/c), loops (g/l), p (g/n), name (v/n)
+ edges from 99f872b (vertex names):
[1] 1--4 1--6 1--9