我正在寻找一个单行程序来在对象数组中同时获取多个轴句柄,以便它可以传递到linkaxes
。我特意寻找一个不使用循环的单行语句。我知道我过去已经用几个嵌套函数完成了这个,但我无法弄清楚我做了什么。
函数gca
可用于获取特定数字的轴句柄,但此功能似乎没有记录。例如,调用gca(3)
来获取图3的轴句柄。我以前认为我可以调用gca([1:4])
来获取所有四个轴句柄,但这似乎不起作用。
我知道我可以通过调用get
来使用get([1:4],'currentaxes')
,它返回一个轴句柄的单元格数组。但是,我还没有找到将对象的单元格数组转换为对象数组的方法。
我正在使用MATLAB R2015a。
答案 0 :(得分:3)
构建轴后:
figure(1); axes();
figure(2); axes();
figure(3); axes();
单行很有趣:
linkaxes(arrayfun(@(k) get(k,'CurrentAxes'), 1:3));
稍后修改
显然,这仅适用于旧式图形(其中图形对象的句柄是double
个数字)。新的句柄图形(作为正确的对象)无法通过arrayfun
:
也许更简单的单行:
linkaxes(findobj(1:3,'Type','Axes'));
会工作......
答案 1 :(得分:3)
除了已发布的答案,可能的单行解决方案可能是:
linkaxes(findobj('type','axes'))
它还允许隐式阻止在没有figure
的情况下考虑axes
。
希望这有帮助。
答案 2 :(得分:2)
这个怎么样?
cell_of_axes = get([1:4], 'currentaxes');
array_of_axes = [cell_of_axes{:}];
linkaxes(array_of_axes);
答案 3 :(得分:0)
如果您只想链接轴的特定子集,并且将它们作为对象存储在单元格中:
linkaxes([all_axes{:}], 'x');