Matlab绘制树形图

两种方法绘制树形图,这里只讨论画出树形图,不关心树形图的作用和来源
结果图:
Matlab绘制树形图_第1张图片Matlab绘制树形图_第2张图片


treeplot方法

treeVec = [0 1 2 2 1 5 5 1 8 1 10];
treeplot(treeVec);
count = size(treeVec,2);
[x,y] = treelayout(treeVec);
x = x';
y = y';
name1 = cellstr(num2str((1:count)'));
text(x(:,1),y(:,1),name1,'VerticalAlignment','bottom','HorizontalAlignment','right');

深度优先搜索,结果显示为图1所示,treeVec有自己的书写格式,包含所有父节点,具体可查询treeplot帮助文档;生成的树形图有一定局限性,而且某些情况下不够美,可采用下面这种方法。

biograph方法

ChannelName = {'1通道','2通道','3通道','4通道','5通道','6通道','7通道','8通道'};
tree  = [4 2;4 3;4 5;2 1;5 6;6 7;6 8];
cm = zeros(8);
for i = 1:7
   cm(tree(i,1),tree(i,2)) = 1; 
end
bg1 = biograph(cm,ChannelName);
view(bg1);

结果如右图所示,理论上可以显示任意树形图;
biograth第一个变量需要输入一个稀疏矩阵,相关函数sparse;
我这里是直接创建了一个稀疏矩阵,通过在某些点赋予1;
cm变量展示图:

1 2 3 4 5 6 7 8
1 0 0 0 0 0 0 0 0
2 1 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0
4 0 0 1 1 0 1 0 0
5 0 0 0 0 0 1 0 0
6 0 0 0 0 0 0 1 1
7 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0

cm中为1的坐标就是tree的内容
详情见biograth的官方文档;
biograth功能远不止显示一个树状图这么简单,可以绘制多连通的网状图,利用graphminspantree可以在包含权重的网状图中计算最小生成树,用到再讨论。

你可能感兴趣的:(Matlab)