3

我想创建一个带有自定义顶点名称的图形。这可能与 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。

4

2 回答 2

4

最好的方法是这样使用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
于 2021-03-11T12:50:38.013 回答
4

据我了解,一种方法MetaGraphs.jl是定义一个“索引属性”,例如:name,它将包含:A,:B等。

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

于 2021-03-11T07:39:29.250 回答