两种方法绘制树形图,这里只讨论画出树形图,不关心树形图的作用和来源
结果图:
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:7cm(tree(i,1),tree(i,2)) = 1; endbg1 = biograph(cm,ChannelName);view(bg1);
结果如右图所示,理论上可以显示任意树形图;
biograth
第一个变量需要输入一个稀疏矩阵,相关函数sparse
;
我这里是直接创建了一个稀疏矩阵,通过在某些点赋予1;
cm
变量展示图:
cm
中为1的坐标就是tree
的内容
详情见biograth
的官方文档;
biograth
功能远不止显示一个树状图这么简单,可以绘制多连通的网状图,利用graphminspantree
可以在包含权重的网状图中计算最小生成树,用到再讨论。