如何在Matlab中告诉轴的传说?

时间:2012-01-30 22:47:21

标签: matlab handle legend figure axes

以下stackoverflow qestion:

Matlab: How to obtain all the axes handles in a figure handle?

确定如何从Matlab中的图形获取所有轴的句柄。但是,此列表还将包含图例句柄,至少在R2008a中,它们似乎也是轴。如何(以编程方式)在轴向量处理中的真实绘图轴上传说?

3 个答案:

答案 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);

不幸的是,此解决方案取决于实施细节。