在图论那一章,我们讲过最小生成树和单源最短路径(见:从零开始学数学建模):
以最短路径那节课为例,把绘图p=plot那部分代码写为:
% plot绘图有很多参数可以设置,使图尽量美观
P = plot(G,'EdgeLabel',G.Edges.Weight, ...'EdgeFontSize',18,'EdgeFontAngle','normal',...'layout','force',...'EdgeColor','b', ...'NodeFontSize',12, ...'LineWidth',4, ...'NodeFontSize',24, ...'ArrowSize',16);
得到的输出图(不同matlab版本有差异,但整体布局相同,且计算结果相同,都是节点1到3到6):
绘制该图形时,代码中设置'layout','force'意味着设定布局(layout)为力导向算法计算布局(force),整体呈现较为均衡的分布(轮廓五边形)。图中标红的路径即为最短路径(1,3,6)。
而如果把布局更改下(只需要把'layout'后面参数'force'改成'layered',其他都不变):
P = plot(G,'EdgeLabel',G.Edges.Weight, ...'EdgeFontSize',18,'EdgeFontAngle','normal',...'layout','layered', ...'EdgeColor','b', ...'NodeFontSize',12, ...'LineWidth',4, ...'NodeFontSize',24, ...'ArrowSize',16);
得到的输出图:
代码中设置'layout','layered'意味着布局设定为分层布局,图节点置于多层中。而在此基础上,可修改其布局方向,只需在代码中加上'Direction','right',即可把布局方向改为向右:
注意无论哪种布局,其表示的所求出的最短路径都是(1,3,6)是不会变的。
总之在图论中绘制图像时,设定好'layout'以及相关参数,可以改变其布局等从而选择最合适的。可以设定的选项包括下表中,其中'force'和''layered'就是前面讲的。
选项 | 描述 | 特定于布局的名称-值对组 |
---|---|---|
'auto' (默认值) | 根据图的大小和结构自动选择布局方法。 | — |
'circle' | 圆形布局。将图节点放置在以原点为中心、半径为 1 的圆形上。 |
|
'force' | 力导向图布局。在相邻节点之间使用引力,在远距离节点之间使用斥力。 |
|
'layered' | 分层布局。将图节点置于多层中,表示层级结构。默认情况下是逐层向下的(有向无环图的箭头向下)。 |
|
'subspace' | 子空间嵌入式布局。在高维嵌入式子空间中绘制图节点,然后将位置投影回二维。默认情况下,子空间维度是 100 或节点总数(以两者中较小者为准)。 |
|
'force3' | 三维力导向图布局。 |
|
'subspace3' | 三维子空间嵌入式布局。 |
|
更多数模文章:
想参加数学建模比赛,但什么都不会,该怎么学呢?
一图速览全年16场数学建模竞赛!
从零开始学数学建模
DeepSeek教你用DeepSeek做数学建模
建模手/论文手/编程手,分别该怎么学数学建模?
数模用MATLAB还是python?