为顶点添加自定义名称
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
我想创建一个带有自定义顶点名称的图。 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