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

cro*_*bar 6 matlab axes handle legend figure

以下stackoverflow问题:

Matlab:如何获取图形句柄中的所有轴手柄?

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

Nzb*_*buu 12

linkaxes,你想要的代码是:

ax = findobj(gcf,'type','axes','-not','Tag','legend','-not','Tag','Colorbar');
Run Code Online (Sandbox Code Playgroud)

这将返回当前图中所有数据轴的句柄.


And*_*ein 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]

 ....
Run Code Online (Sandbox Code Playgroud)

2)另一个区别(更强大)是常规轴没有String属性,但是传说有.我不确定是否还有其他类型的对象也具有String属性.例如:

  plot(magic(3));legend('a','v','b');
  allAxesInFigure = findall(f,'type','axes')
  b = isprop(allAxesInFigure,'String')
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式验证它:

get(gca,'String')
??? 使用==> get时出错
'axes'类中没有'String'属性.

但在另一方面,对于传说有这样的属性.这就是它更强大的原因.

 plot(magic(3)); l = legend('a','b','c');
 get(l,'String')
Run Code Online (Sandbox Code Playgroud)

ans ='a''b''c'

3)我建议在更广泛的背景下解决这个问题.只需通过存储手柄即可跟踪您创建的图例和轴.也就是说,而不是编码如下:

 plot(magic(3));
 legend('a','v','b');
 plot(magic(5));
 legend('a','v','b','c','d');
Run Code Online (Sandbox Code Playgroud)

像这样的代码:

 p(1) = plot(magic(3));
 l(1) = legend('a','v','b');
 p(2) = plot(magic(5));
 l(2) = legend('a','v','b','c','d');
Run Code Online (Sandbox Code Playgroud)