为顶点添加自定义名称

Adding custom names for vertices

我想创建一个带有自定义顶点名称的图。 MetaGraphs.jl 这可能吗?

using MetaGraphs
using LightGraphs
using GraphPlot

# Create empty graph
gm = MetaGraph()

# Add vertices with properties
add_vertex!(gm, :A, [7.2,8.6])
add_vertex!(gm, :B, [3.2,6.7])
add_vertex!(gm, :C, [6.3,3.9])
add_vertex!(gm, :D, [2.4,6.7])

gplot(gm, nodelabel = vertices(gm))

然而,顶点的名称可能是 :A 而不是 1。因为在下一步中我想添加一条边 add_edge!(gm, :A,:B) (这是不正确的,当前节点的名称 1,2,3... ,所以创建边的方式是 add_edge!(gm, 1,2)

换句话说,有 A,B,C, ... 而不是 1,2,3。

据我了解,在 MetaGraphs.jl 中实现此目的的一种方法是定义一个“索引 属性”,例如 :name,其中将包含 :A , :B, 等等

然后,如果我没记错的话,您可以使用语法 add_edge!(gm, gm[:A, :name], gm[:B, :name]) 添加边。至于绘图,您可以简单地使用 get_prop.

检索 属性

最好的方法是像这样使用 set_indexing_prop!

g = MetaGraph(path_graph(3))
set_prop!(g, 1, :name, 'a')
set_prop!(g, 2, :name, 'b')
set_prop!(g, 3, :name, 'c')
set_indexing_prop!(g, :name)

然后,您可以引用名称,它们将被翻译成顶点索引,它们是整数:

g['a', :name]  # returns 1
g['b', :name]  # returns 2
g['c', :name]  # returns 3
has_edge(g, g['b', :name], g['c', :name])  # returns true