【问题标题】:How do I get the handles of all open figures in MATLAB如何在 MATLAB 中获取所有打开图形的句柄
【发布时间】:2011-05-31 05:58:08
【问题描述】:

我在 matlab 中有九个打开的图形(由另一个函数生成),我想将它们全部打印到文件中。有谁知道如何在 MATLAB 中获取所有打开图形的句柄?

我知道gcf,但它似乎并没有达到我想要的效果。

【问题讨论】:

    标签: matlab matlab-figure figures


    【解决方案1】:

    有几种方法可以做到这一点。一种方法是获取root object 的所有子代(在以前的版本中由句柄0 表示):

    figHandles = get(groot, 'Children');  % Since version R2014b
    figHandles = get(0, 'Children');      % Earlier versions
    

    或者你可以使用函数findobj:

    figHandles = findobj('Type', 'figure');
    

    如果任何数字有hidden handles,您可以使用函数findall

    figHandles = findall(groot, 'Type', 'figure');  % Since version R2014b
    figHandles = findall(0, 'Type', 'figure');      % Earlier versions
    

    【讨论】:

    • get()findall() 的第一个参数是句柄。提供 0 是什么意思?
    • @MinhTran:这是对先前版本的保留,当时根对象由句柄 0 表示。它仍然适用于较新的版本,但最好使用groot。我已经相应地更新了我的答案。
    【解决方案2】:

    我认为findall 应该可以工作

    handles=findall(0,'type','figure')

    【讨论】:

      【解决方案3】:

      最好的办法之一是不需要寻找把手。创建每个图形时,请捕获其句柄。

      h(1) = figure;
      h(2) = figure;
      ...
      

      正如这里的一位开发人员告诉我的那样:

      它们被称为句柄,因为你应该抓住它们

      【讨论】:

      • 这是一个很好的观点,尽管这取决于您的情况和工作流程。如果您有各种各样的绘图命令来显示不同的专业绘图,并且您想要一些“处理已经发生的事情”的东西,那么能够查询句柄会很有用。
      • 此外,还有一些函数可以为您绘制许多数字(anova1 将绘制三个)并且它们可能不会返回这些句柄
      【解决方案4】:

      对于手柄质量,您已经得到了很好的答案。但原始问题的另一个提示 - 打印所有要归档的数字:您可以使用 publish 选项,而无需处理数字或句柄。

      【讨论】:

      • +1。考虑到这个相对未知的命令有多么强大,我很惊讶没有更多的支持。
      • 在缺席数月后才登录,只是为了支持 Google 刚刚指出我的答案。
      猜你喜欢
      • 2011-04-25
      • 2014-11-03
      • 2014-10-31
      • 2014-10-12
      • 2011-09-02
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 2014-05-20
      相关资源
      最近更新 更多