两种方法绘制树形图,这里只讨论画出树形图,不关心树形图的作用和来源
结果图:
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
可以在包含权重的网状图中计算最小生成树,用到再讨论。