最有效的方法来区分处理父母在处理图形对象的数组

4视图(30天)
,这是我想做的事:
% Preallocate处理图形对象的数组,H,然后添加各种对象处理……
H = gobject (13);% Preallocate处理图形对象的数组
f1 =图;
H(1) =次要情节(2 2 1);
x = linspace(2 *π,2 *π);
p =情节(x, cos (x), x, sin (x));
l =传奇(“Plot1”,“Plot2”);
H(2) =次要情节(2,2,(2、4));
s =冲浪(峰);
t =标题(“哟,这是我的标题”);
H (3) = (2, 2, 3);
f2 =图;
H(4) =次要情节(2 2 1);
H(5) =次要情节(2,2,(2、4));
H(6) =次要情节(2、2、3);
H (7) = f1;
H (8) = f2;
H (9) = l;
H = t (10);
H(11) =(1页);
H(12) =(2页);
H (13) = s;
正如你所看到的,H可能包括各种各样的对象:数据,轴,线条,冲浪,标题,传说等等。
所以,隔离这些对象与一个“位置”的属性,我做以下:
%降低H消除线路和单一的冲浪,然后找到父对象:
H = H (isprop (H,“位置”));
H_Parents =得到(H,“父”);
现在,H和H_Parents应该返回类似如下:
H应该给一个x10图形阵列:
(轴轴轴轴轴轴图图传说的文本)
H_Parents应该给10 x1单元阵列:
(图)
(图)
(图)
(图)
(图)
(图)
(根)
(根)
(图)
(轴)
正如您可以看到的,第一个“6”数据的父母6次要情节,这只是f1和f2。
这是我的问题…我似乎无法找到一个有效的方式区分,例如,次要情节1(即之母。f1)次要情节4(我的父母。e, f2)通用的方式从其他家长。我的理想的解决方案是这样的:
[1 1 1 2 2 2 3 3 1 4]
…因为…
…的父母前三次要情节都是f1,如此:[1 1 1…
…的父母未来3次要情节都是f2,所以:2 2 2…
…f1和f2的父母都是“根”,所以需要第三个父类别:3 3…
…父的传说,l, f1,就是类别1:1…
…和父母的标题、t是次要情节2,这需要4类别,所以:4)。
我希望我的问题是明确的。我的目标是有一个明确的标识符为每个公共父在我所有的处理图形对象。任何帮助都是感激。
贾斯汀:谢谢提前)

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2016年7月7日
祖先(TheHandle,“图”)
5个评论
jH@
jH@ 2016年7月16日
编辑:jH@ 2016年7月16日
沃尔特,我检查一下你的建议,它的伟大:)我应该指出一个小修正……得到这个工作,我不得不从我的附录H_Parents_Arr(见下面的补充回复)副H_Parents显示。因此,代码如下所示:
H_Parent_Arr = [H_Parent {}): ';
[Unique_Parents, ~, Parent_Idx] =独特(H_Parent_Arr)
再次感谢,工作就像一个魅力!

登录置评。

答案(1)

jH@
jH@ 2016年7月9日
我想我的标题应该是如何最好地细分处理图形对象数组分成小组基于共同的父母,”之类的这种效果。因为我觉得我找到了一个比上面我要求更理想的解决方案。
从H_Parents上图:
%转换单元阵列的H_Parent对象数组:
H_Parent_Arr = [H_Parent {}): ';
%检查每个对象的平等与所有其他对象“H_Parent_Arr”在“H_Parent_Arr”:
E = arrayfun (@ (x) eq (x, H_Parent_Arr) H_Parent_Arr,“UniformOutput”、假);
%转换单元阵列“E”到一个逻辑数组,然后消除所有非唯一逻辑数组的行,同时保留行顺序:
E =独特([E {}):,“行”,“稳定”);
%原对象的创建单元阵列,由公共父分组:
G =细胞(大小(E, 1), 1);
2 = 1:长度(G)
G {2} = H (E (ii):) ');
结束
你们是怎么认为的呢?有更好的方法吗?
1评论
jH@
jH@ 2016年7月9日
顺便说一下,如果你 做了 想要达到我要求的第一“理想”解决方案,你可以这样做(代替G =细胞(…)和for循环的代码块以上):
我= repmat((1:尺寸(E, 1))”, 1,尺寸(E, 2));
G_orig_ideal =我(E);

登录置评。

类别

找到更多的在图形对象编程帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!