matlab怎么标记节点,为图节点和边添加标签
创建并绘制图
创建表⽰某个城市中⽹格化街道和交叉点的图。为边添加权重,使主⼲道和横穿街道在图中以不同的⽅式显⽰。使⽤与边权重成⽐例的边线宽绘图。
s = [1 1 2 2 3 4 4 5 5 6 7 7 8 8 9 10 11];
t = [2 4 3 5 6 5 7 6 8 9 8 10 9 11 12 11 12];
weights = [1 5 1 5 5 1 5 1 5 5 1 5 1 5 5 1 1];
G = graph(s,t,weights);
P = plot(G,'LineWidth',G.Edges.Weight);
添加节点标签
对于节点数不超过 100 个的图,MATLAB® 会使⽤数字节点索引或节点名称⾃动标记节点(更⼤的图默认情况下将省略这些标签)。但是,您可以通过调整 GraphPlot 对象 P 的 NodeLabel 属性或使⽤ labelnode 函数来更改节点标签。因此,即使节点具有名称,也可以使⽤与这些名称不同的标签。
删除默认的数字节点标签。将⼀个交叉点标记为 Home,将另⼀个标记为 Work。
labelnode(P,1:12,'')
labelnode(P,5,'Home')
labelnode(P,12,'Work')
添加边标签
在绘制的图中,边不是⾃动标记的。您可以通过更改 GraphPlot 对象 P 的 EdgeLabel 属性值或使⽤ labeledge 函数来添加边标签。
为纽约市的街道添加边标签。边的顺序在图的 G.Edges 表中定义,因此您指定的标签顺序必须遵循该顺序。将边标签直接存储在 G.Edges 表中很⽅便,这样边名称就位于其他边信息的旁边。
G.Edges
ans=17×2 table
EndNodes Weight
fontweight属性bold________ ______
1 2 1
1 4 5
2 3 1
2 5 5
3 6 5
4 5 1
4 7 5
5 6 1
5 8 5
6 9 5
7 8 1
7 10 5
8 9 1
8 11 5
9 12 5
10 11 1
下⾯的⽰例有 17 条边,但只有 7 个唯⼀的街道名称。因此,可以在元胞数组中定义街道名称,然后对元胞数组进⾏索引,以检索每条边需要的街道名称。将变量添加到包含街道名称的 G.Edges 表中。
streets = {'8th Ave' '7th Ave' '6th Ave' '5th Ave' ...
'W 20th St' 'W 21st St' 'W 22nd St'}';
inds = [1 5 1 6 7 2 5 2 6 7 3 5 3 6 7 4 4];
G.Edges.StreetName = streets(inds);
G.Edges
ans=17×3 table
EndNodes Weight StreetName
________ ______ _____________
1 2 1 {'8th Ave' }
1 4 5 {'W 20th St'}
2 3 1 {'8th Ave' }
2 5 5 {'W 21st St'}
3 6 5 {'W 22nd St'}
4 5 1 {'7th Ave' }
4 7
5 {'W 20th St'}
5 6 1 {'7th Ave' }
5 8 5 {'W 21st St'}
6 9 5 {'W 22nd St'}
7 8 1 {'6th Ave' }
7 10 5 {'W 20th St'}
8 9 1 {'6th Ave' }
8 11 5 {'W 21st St'}
9 12 5 {'W 22nd St'}
10 11 1 {'5th Ave' }
更新 EdgeLabel 属性,以引⽤这些街道名称。
P.EdgeLabel = G.Edges.StreetName;
调整字体属性
图论图中的节点标签和边标签具有各⾃的属性,它们控制着标签的外观和样式。由于属性是分离的,因此可以对节点标签和边标签使⽤不同的样式。
对于节点标签,可以调整:
NodeLabel
NodeLabelColor
NodeFontName
NodeFontSize
NodeFontWeight
NodeFontAngle
对于边标签,可以调整:
EdgeLabel
EdgeLabelColor
EdgeFontName
EdgeFontSize
EdgeFontWeight
EdgeFontAngle
使⽤这些属性,可以调整此⽰例中纽约市街道使⽤的字体:
更改 NodeFontSize 和 NodeLabelColor,使交叉点标签的字体为 12 磅,颜⾊为红⾊。
更改 EdgeFontWeight、EdgeFontAngle 和 EdgeFontSize,为⼀个⽅向的街道使⽤较⼤的粗体字体,为另⼀个⽅向的街道使⽤较⼩的斜体字体。
更改 EdgeFontName,使⽤ Times New Roman 作为边标签。
可以使⽤ highlight 函数更改图边⼦集的图属性。创建逻辑索引 isAvenue,对于包含单词 'Ave' 的边标签,逻辑索引的值为 true。使⽤此逻辑向量作为 highlight 的输⼊,以⼀种⽅式标记所有主⼲道,以另
⼀种⽅式标记所有⾮主⼲道。
P.NodeFontSize = 12;
P.NodeLabelColor = 'r';
isAvenue = contains(P.EdgeLabel, 'Ave');
highlight(P, 'Edges', isAvenue, 'EdgeFontAngle', 'italic', 'EdgeFontSize', 7);
highlight(P, 'Edges', ~isAvenue, 'EdgeFontWeight', 'bold', 'EdgeFontSize', 10);
P.EdgeFontName = 'Times New Roman';
突出显⽰边
到 Home 和 Work 节点之间的最短路线,并检查哪些街道在该路线上。以红⾊突出显⽰该路线上的节点和边,并删除不在该路线上的所有边的边标签。
[path,d,pathEdges] = shortestpath(G,5,12)
path = 1×4
5 6 9 12
d = 11
pathEdges = 1×3
8 10 15
G.Edges.StreetName(pathEdges,:)
ans = 3x1 cell
{'7th Ave' }
{'W 22nd St'}
{'W 22nd St'}
highlight(P,'Edges',pathEdges,'EdgeColor','r')
highlight(P,path,'NodeColor','r')
labeledge(P, setdiff(1:numedges(G), pathEdges), '')

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。