添加图节点名称、边权重和其他属性
此示例演示如何向使用 graph
和 digraph
创建的图中的节点和边添加属性。当您最初调用 graph
或 digraph
来创建图时,可以指定节点名称或边权重。但是,此示例演示了如何在创建图后向图添加属性。
创建图
创建一个有向图。s
和 t
中的对应元素用于定义图中每条边的源节点和目标节点。
s = [1 1 2 2 3]; t = [2 4 3 4 4]; G = digraph(s,t)
G = digraph with properties: Edges: [5x1 table] Nodes: [4x0 table]
添加节点名称
通过将变量 Name
添加到 G.Nodes
表中来向图中添加节点名称。Name
变量必须指定为 N
×1
字符向量元胞数组或字符串数组,其中 N = numnodes(G)
。添加节点名称时请务必使用 Name
变量,因为该变量名称会被一些图函数进行特殊处理。
G.Nodes.Name = {'First' 'Second' 'Third' 'Fourth'}';
查看新的 Nodes
表。
G.Nodes
ans=4×1 table
Name
__________
{'First' }
{'Second'}
{'Third' }
{'Fourth'}
使用表索引查看节点 1 和 4 的名称。
G.Nodes.Name([1 4])
ans = 2x1 cell
{'First' }
{'Fourth'}
添加边权重
通过将变量 Weight
添加到 G.Edges
表中来向图添加边权重。Weight
变量必须是 M
×1 数值向量,其中 M = numedges(G)
。添加边权重时请务必使用 Weight
变量,因为该变量名称会被一些图函数进行特殊处理。
G.Edges.Weight = [10 20 30 40 50]';
查看新的 Edges
表。
G.Edges
ans=5×2 table
EndNodes Weight
________________________ ______
{'First' } {'Second'} 10
{'First' } {'Fourth'} 20
{'Second'} {'Third' } 30
{'Second'} {'Fourth'} 40
{'Third' } {'Fourth'} 50
使用表索引查看 G.Edges
的第一行和第三行。
G.Edges([1 3],:)
ans=2×2 table
EndNodes Weight
________________________ ______
{'First' } {'Second'} 10
{'Second'} {'Third' } 30
添加自定义属性
原则上,您可以将任何变量添加到 G.Nodes
和 G.Edges
中,来定义图节点或边的属性。添加自定义属性很有用,因为 subgraph
和 reordernodes
之类的函数可以保留图属性。
例如,可以向 G.Edges
添加名为 Power
的变量,来指示每条边是 'on'
还是 'off'
。
G.Edges.Power = {'on' 'on' 'on' 'off' 'off'}'; G.Edges
ans=5×3 table
EndNodes Weight Power
________________________ ______ _______
{'First' } {'Second'} 10 {'on' }
{'First' } {'Fourth'} 20 {'on' }
{'Second'} {'Third' } 30 {'on' }
{'Second'} {'Fourth'} 40 {'off'}
{'Third' } {'Fourth'} 50 {'off'}
向 G.Nodes
添加名为 Size
的变量,来指示每个节点的实际大小。
G.Nodes.Size = [10 20 10 30]'; G.Nodes
ans=4×2 table
Name Size
__________ ____
{'First' } 10
{'Second'} 20
{'Third' } 10
{'Fourth'} 30
使用变量编辑器修改表
由于 Nodes
和 Edges
都是表,因此您可以使用变量编辑器以交互方式查看或编辑这些表。有关详细信息,请参阅 创建和编辑变量。
为图论图的节点和边添加标签
绘制图时,您可以使用 G.Nodes
和 G.Edges
中的变量为图节点和边添加标签。这种做法很方便,因为已经确保这些变量具有正确数量的元素。
绘制图,并使用 G.Edges
中的 Power
变量为边添加标签。使用 G.Nodes
中的 Size
变量为节点添加标签。
p = plot(G,'EdgeLabel',G.Edges.Power,'NodeLabel',G.Nodes.Size)
p = GraphPlot with properties: NodeColor: [0 0.4470 0.7410] MarkerSize: 4 Marker: 'o' EdgeColor: [0 0.4470 0.7410] LineWidth: 0.5000 LineStyle: '-' NodeLabel: {'10' '20' '10' '30'} EdgeLabel: {'on' 'on' 'on' 'off' 'off'} XData: [2 1.5000 1 2] YData: [4 3 2 1] ZData: [0 0 0 0] Use GET to show all properties