如何通过YLabel字符串查找轴?

Mic*_*ael 4 matlab

我正在创建一个包含多个子图并将其保存到文件的图形.像这样:

fig = figure;
ax1 = subplot(2, 1, 1);
ax2 = subplot(2, 1, 2);
ylabel(ax1, 'First');
ylabel(ax2, 'Second');
savefig('myfigure.fig')
Run Code Online (Sandbox Code Playgroud)

后来,我想将一个子图复制到一个新图,而不重新运行创建图的代码.我当前的方法是加载保存的图形,找到我想要通过其YLabel复制的轴,然后将其复制到新图形:

newfig = figure;
oldfig = openfig('myfigure.fig');
ylabel_obj = findobj(oldfig, 'String', 'First');  % This is not givng me what I expect
old_axes_obj = ylabel_obj.Parent;
new_axes_obj = copyobj(old_axes_obj, newfig);
Run Code Online (Sandbox Code Playgroud)

问题是findobj上面没有找到YLabel.它只返回一个0x0空的GraphicsPlaceholder数组.为什么findobj找不到我的YLabel?有没有更好的方法来找到我想要的轴?

gno*_*ice 6

标签文本对象的句柄可见性已关闭,因此它不会显示在Children其父轴的属性中,因此在使用时将无法找到findobj.您可以使用findall来解决此限制:

ylabel_obj = findall(oldfig, 'String', 'First');
Run Code Online (Sandbox Code Playgroud)

或者,您可以将root ShowHiddenHandles属性设置'on'为列出所有对象句柄,而不管其HandleVisibility属性设置,制作findobjfindall等效.