在 MATLAB 中创建邻接矩阵图
Create graph of adjacency matrix in MATLAB
我有以下邻接矩阵:
行代表 B1
到 B8
该列显示 W1
到 W8
。
如何创建它的图形表示?
您可以使用内置的 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'})`
- For a large amount of points
我有以下邻接矩阵:
行代表 B1
到 B8
该列显示 W1
到 W8
。
如何创建它的图形表示?
您可以使用内置的 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'})`
- For a large amount of points