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
)。
文章来源地址https://www.toymoban.com/news/detail-650666.html文章来源:https://www.toymoban.com/news/detail-650666.html