以下stackoverflow qestion:
Matlab: How to obtain all the axes handles in a figure handle?
确定如何从Matlab中的图形获取所有轴的句柄。但是,此列表还将包含图例句柄,至少在R2008a中,它们似乎也是轴。如何(以编程方式)在轴向量处理中的真实绘图轴上传说?
答案 0 :(得分:12)
从linkaxes
开始,您想要的代码是:
ax = findobj(gcf,'type','axes','-not','Tag','legend','-not','Tag','Colorbar');
这将返回当前图中所有数据轴的句柄。
答案 1 :(得分:6)
1)默认情况下,图例的Tag
属性为“图例”。当然,没有承诺不改变它。
get(l)
....
BusyAction: 'queue'
HandleVisibility: 'on'
HitTest: 'on'
Interruptible: 'off'
Selected: 'off'
SelectionHighlight: 'on'
**Tag: 'legend'**
Type: 'axes'
UIContextMenu: 200.0018
UserData: [1x1 struct]
....
2)另一个区别(更强大)是常规轴没有String
属性,但是传说有。{1}}属性。我不确定是否还有其他类型的对象也具有String
属性。例如:
plot(magic(3));legend('a','v','b');
allAxesInFigure = findall(f,'type','axes')
b = isprop(allAxesInFigure,'String')
您可以致电:
进行验证的get(GCA, '字符串')
???使用==>时出错得到
'axes'类中没有'String'属性。
但另一方面,对于传说,是这样的属性。这就是它更强大的原因。
plot(magic(3)); l = legend('a','b','c');
get(l,'String')
ans ='a''b''c'
3)我建议在更广泛的背景下解决这个问题。只需通过存储手柄即可跟踪您创建的图例和轴。 也就是说,而不是编码如下:
plot(magic(3));
legend('a','v','b');
plot(magic(5));
legend('a','v','b','c','d');
这样的代码:
p(1) = plot(magic(3));
l(1) = legend('a','v','b');
p(2) = plot(magic(5));
l(2) = legend('a','v','b','c','d');
答案 2 :(得分:0)
稍微修改my answer at the stackoverflow question you mentioned的代码:
axesHandles = get(fig, 'Children');
classHandles = handle(axesHandles);
count = length(axesHandles);
isLegend = false(1, count);
for i = 1:count
isLegend(i) = strcmp(class(classHandles(i)), 'scribe.legend') == 1;
end
legendHandles = axesHandles(isLegend);
不幸的是,此解决方案取决于实施细节。