【问题标题】:Create graph of adjacency matrix in MATLAB在 MATLAB 中创建邻接矩阵图
【发布时间】:2017-05-06 17:59:49
【问题描述】:

我有以下邻接矩阵:

这些行代表B1B8 并且该列将W1 显示为W8

如何创建它的图形表示?

【问题讨论】:

    标签: matlab graph adjacency-matrix


    【解决方案1】:

    您可以使用内置的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'})`
    

    【讨论】:

    • W 和 B 对于第一行是不同的,例如你看到它 B1 连接到 W1 和 W4
    • 我添加了一段关于将您的矩阵转换为预期格式的段落。
    • 对不起,如果在 matlab 中非常糟糕,但我尝试了代码 imgur.com/noskzBO 并得到了 imgur.com/GkTG4kb
    • @m7913d 不错的答案! graphdigraph 函数是在 MATLAB R2015b 中引入的。由于它是一个相当新的版本,我建议在你的答案中添加这个。
    • @EbraamEmil 您使用的是什么版本的 MATLAB?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多