3.3 更改图节点的布局
使用 layout 函数更改绘图中的图节点的布局。不同的布局选项会自动计算绘图的节点坐标。或者,可以使用 GraphPlot 对象的 XData 、 YData 和 ZData 属性来指定您自己的节点坐标。不使用默认的二维布局方法,而是使用 layout 来指定 'force3' 布局(三维力导向图布局)。
layout(p, 'force3' )
view(3)
3.4 按比例对节点着色
根据图节点的出入度为它们着色。在该图中,所有内部节点都具有最大度数 4,沿图边的节点的度数为 3,角节点具有最小度数 2。将该节点着色数据存储为 G.Nodes 中的变量 NodeColors 。
G.Nodes.NodeColors = degree(G);
p.NodeCData = G.Nodes.NodeColors;
colorbar
3.5 按权重列出的边线宽度
向图边添加一些随机整数权重,然后绘制这些边,使它们的线宽与权重成比例。由于约大于 7 的边线宽度开始变得很复杂,因此缩放线宽,使权重最大的边的线宽为 7。将该边宽数据存储为 G.Edges 中的变量LWidths 。
G.Edges.Weight = randi([10 250],130,1);
G.Edges.LWidths = 7*G.Edges.Weight/max(G.Edges.Weight);
p.LineWidth = G.Edges.LWidths;

3.6 提取子图
提取 G 的右上角并将其作为子图绘制,以更便于读取图上的详细信息。新图 H 从 G 继承 NodeColors 和 LWidths 变量,因此最直接的方式就是重新创建之前的绘图自定义项。但是,系统会对 H 中的节点重新进行编号,以将图中的新节点编号考虑在内。
H = subgraph(G,[1:31 36:41]);
p1 = plot(H, 'NodeCData' ,H.Nodes.NodeColors, 'LineWidth' ,H.Edges.LWidths);
colorbar

3.7 为节点和边添加标签
使用 labeledge 对宽度大于 6 的边添加标签 'Large' 。 labelnode 函数以相似的方式为节点添加标签。
labeledge(p1,find(H.Edges.LWidths > 6), 'Large' )

3.8 突出显示最短路径
查找子图 H 中节点 11 与节点 37 之间的最短路径。以红色高亮显示沿此路径的边,并增大路径的结束节点的大小。
path = shortestpath(H,11,37)
path = 1×10
11 12 17 18 19 24 25 30 36 37
highlight(p1,[11 37])
highlight(p1,path, 'EdgeColor' , 'r' )
删除节点标签和颜色栏,并使所有节点都变成黑色。
p1.NodeLabel = {};
colorbar off
p1.NodeColor = 'black' ;

查找忽略边权重的其他最短路径。以绿色突出显示此路径。
path2 = shortestpath(H,11,37, 'Method' , 'unweighted' )
path2 = 1×10
11 12 13 14 15 20 25 30 31 37
highlight(p1,path2, 'EdgeColor' , 'g' )

3.9 绘制大图
创建包含数十万个甚至数百万个节点和/或边的图是很常见的。为此,plot 处理大图会略有不同,以保持可读性和性能。处理节点超过 100 个的图时, plot 函数会进行以下调整:
1 默认的图布局方法始终为 'subspace' 。
2 不会再自动为这些节点添加标签。
3 MarkerSize 属性设置为 2 。(较小的图的标记大小为 4 )。
4 有向图的 ArrowSize 属性设置为 4 。(较小的有向图使用的箭头大小为 7 )。