在 MATLAB 中创建邻接矩阵图

Create graph of adjacency matrix in MATLAB

我有以下邻接矩阵:

行代表 B1B8 该列显示 W1W8

如何创建它的图形表示?

您可以使用内置的 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 期望邻接矩阵中的行和列具有相同的含义,而您的问题并非如此。因此,我们应该添加虚拟行(对于 W1W8)和列(对于 B1B8)。

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