如何在 MATLAB 中获取所有打开图形的句柄

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 刚刚指出我的答案。

以上是关于如何在 MATLAB 中获取所有打开图形的句柄的主要内容,如果未能解决你的问题,请参考以下文章

如何获取从句柄到 Matlab 中方法的输出数量?

matlab如何从后向前读入文件tsxtscan

VB获取窗口句柄的详细教程

Win32获取屏幕句柄的函数是啥?

MATLAB如何绘制三维隐函数图形

matlab中如何取消plot画的图