Matlab绘制了一个复杂的结构

时间:2013-11-27 03:17:13

标签: matlab

我使用Matlab实现了ID3决策树,并使用struct()来存储决策树。

基本上树结构如下所示:

root: Attr1
left: [1x1 struct]
right: [1x1 struct]

是的,树结构是以递归方式构建的。

有没有快速的解决方法,以便我可以绘制我的树?

1 个答案:

答案 0 :(得分:1)

我认为(如果我错了,有人可以纠正我)没有内置的方法来压缩递归结构。绘制树的一种可能方法是使用treeplot,这需要您的数据采用特定格式。您可以通过以下方式实现此目的:

function [nodes,attr] = flatten_struct(dtree,level,nodes,attr)
% Flattens the decision tree struct into a format usable by treeplot
if isempty(dtree)
    return;
end
if nargin==1
    level=0;
    nodes=[];
    attr={}; 
end
nodes = [nodes,level];
attr = [attr,dtree.root];
[nodes,attr] = flatten_struct(dtree.right,level+1,nodes,attr);
[nodes,attr] = flatten_struct(dtree.left,level+1,nodes,attr);

您可以使用[nodes,attr] = flatten_struct(tree)调用此代码,然后您可以使用treeplot(nodes)绘制树。您应该能够使用this中列出的方法添加标签来回答其他问题。类似的东西:

[nodes,attr] = flatten_struct(tree);
treeplot(nodes);
[x,y] = treelayout(nodes);
for k=1:length(nodes)
    text(x(k),y(k),attr(k));
end

虽然您可能不得不使用xy值,以便它们不会与树节点重叠。