标记图节点和边
这个例子展示了如何在图节点和边上添加和自定义标签。
创建并绘制图表
创建一个表示城市中网格街道和十字路口的图表。在边缘添加权重,这样主干道和交叉街道就会在图中呈现出不同的样子。用边线宽度与边的权重成比例绘制图形。
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];权重= [1 5 1 5 5 1 5 1 5 5 1 5 1 5 5 1 1 1 1];G =图(s,t,权重);P = plot(G,“线宽”, G.Edges.Weight);
添加节点标签
对于具有100个或更少节点的图,MATLAB®自动使用数值节点索引或节点名称标记节点(较大的图默认省略这些标签)。节点标签可以通过调整NodeLabel
的属性GraphPlot
对象P
或者使用labelnode
函数。因此,即使节点有名称,也可以使用与名称不同的标签。
删除默认数值节点标签。把其中一个十字路口标记为首页
另一个是工作
.
labelnode (P 1:12”) labelnode (P, 5,“回家”) labelnode (P, 12日‘工作’)
添加边缘标签
在绘图图中的边是不自动标记。属性的值可以添加边缘标签EdgeLabel
的属性GraphPlot
对象P
或者使用labeledge
函数。
为纽约市的街道添加边缘标签。中定义了边的顺序G.Edges
表的图形,所以您指定的标签的顺序必须尊重该顺序。方便将边缘标签直接存储在G.Edges
表,这样边名就在其他边信息的旁边。
G.Edges
ans =17×2表EndNodes Weight ________ ______ 12 11 4 5 2 3 12 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
包含街道名称的表。
街道= {“第八大街”“第七大街”“第六大街”“第五大道”...“西20街”“西21街”“西22街”} ';Inds = [1 5 1 6 7 2 5 2 6 7 3 3 6 7 4 4];G.Edges.StreetName =街道(inds);G.Edges
ans =17×3表EndNodes重量StreetName ________ ______ _____________ 1 2 1{第八大街的}1 4 5{“W 20圣”}2 3 1{第八大街的}2 5 5{“W 21 St”}3 6 5{“W 22日圣”}4 5 1{“第七大街”}4 7 5{“W 20圣”}5 6 1{“第七大街”}5 8 5{“W 21 St”}6 9 5{“W 22日圣”}7 8 1{“第六大街”}7 10 5{“W 20圣”}8 9 1{“第六大街”}8 11 5{“W 21 St”}9 12 5{“W 22日圣”}10 11 1{“第五大道”}⋮
更新EdgeLabel
属性引用这些街道名称。
P.EdgeLabel = G.Edges.StreetName;
调整字体属性
图中的节点标签和边标签有自己的属性,这些属性控制标签的外观和样式。由于属性是解耦的,因此可以为节点标签和边缘标签使用不同的样式。
为节点标签,你可以调整:
NodeLabel
NodeLabelColor
NodeFontName
NodeFontSize
NodeFontWeight
NodeFontAngle
为边缘标签,你可以调整:
EdgeLabel
EdgeLabelColor
EdgeFontName
EdgeFontSize
EdgeFontWeight
EdgeFontAngle
使用这些属性来调整本例中的New York City Streets字体:
改变
NodeFontSize
而且NodeLabelColor
因此,交叉标签是12pt .字体和红色。改变
EdgeFontWeight
,EdgeFontAngle
,EdgeFontSize
在一个方向上使用较大的粗体表示街道,在另一个方向上使用较小的斜体表示街道。改变
EdgeFontName
使用Times New Roman作为边缘标签。
您可以使用突出
函数更改图边子集的图属性。创建逻辑索引isAvenue
这是真正的
用于包含单词的边标签“大街”
.使用此逻辑向量作为突出
用一种方式标记所有大道,用另一种方式标记所有非大道。
P.NodeFontSize = 12;P.NodeLabelColor =“r”;isAvenue = contains(P。EdgeLabel,“大街”);突出(P,“边缘”isAvenue,“EdgeFontAngle”,“斜体”,“EdgeFontSize”7);突出(P,“边缘”~ isAvenue,“EdgeFontWeight”,“大胆”,“EdgeFontSize”10);P.EdgeFontName =“Times New Roman”;
强调边缘
找到Home和Work节点之间的最短路径,并检查路径上有哪些街道。用红色突出显示路径上的节点和边,并删除不在路径上的所有边的边标签。
[path,d,pathEdges] =最短路径(G,5,12)
路径=1×45 6 9 12
D = 11
pathEdges =1×38 10 15
G.Edges.StreetName (pathEdges:)
ans =3 x1细胞{“第七大道”}{“西22街”}{“西22街”}
突出(P,“边缘”pathEdges,“EdgeColor”,“r”)突出(P,路径,“NodeColor”,“r”) label (P, setdiff(1:numedges(G), pathEdges),”)