【发布时间】:2017-05-06 17:59:49
【问题描述】:
我有以下邻接矩阵:
这些行代表B1 到B8
并且该列将W1 显示为W8。
如何创建它的图形表示?
【问题讨论】:
标签: matlab graph adjacency-matrix
我有以下邻接矩阵:
这些行代表B1 到B8
并且该列将W1 显示为W8。
如何创建它的图形表示?
【问题讨论】:
标签: matlab graph adjacency-matrix
您可以使用内置的digraph(在 R2015b 中引入)函数来表示邻接矩阵:
A = round(rand(8)); % create adjacency matrix
plot(digraph(A)); % plot directed graph
如果是对称矩阵,您可以使用graph(在 R2015b 中也引入)绘制无向图:
A = rand(8);
A = round((A+A.')/2); % create a symmetric adjacency matrix
plot(graph(A)); % plot undirected graph
将邻接矩阵转换为预期格式
MATLAB 期望行和列在邻接矩阵中具有相同的含义,而您的问题并非如此。因此,我们应该添加虚拟行(对于W1 到W8)和列(对于B1 到B8)。
A_ = round(rand(8)); % creates your adjacency matrix
A = [zeros(size(A_))' A_; A_' zeros(size(A_))]; % converts to the expected format
% gives the columns a points a name
names = {'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'W1', 'W2', 'W3', 'W4', 'W5', 'W6', 'W7', 'W8'};
plot(graph(A, names)); % create the undirected graph as demonstrated earlier
替代品
Using gplot 可能对旧 MATLAB 版本有用
gplot(A, [zeros(8, 1) (1:8)'; 5*ones(8, 1) (1:8)'])
set(gca,'XTick',[0 5])
set(gca,'XTickLabel',{'B', 'W'})
从 R0126b 开始,最后两行可能写得更好:
xticks([0 5]);
xticklabels({'B', 'W'})`
【讨论】: