一次获得多个轴手柄

时间:2016-01-05 17:02:52

标签: matlab matlab-figure

我正在寻找一个单行程序来在对象数组中同时获取多个轴句柄,以便它可以传递到linkaxes。我特意寻找一个不使用循环的单行语句。我知道我过去已经用几个嵌套函数完成了这个,但我无法弄清楚我做了什么。

函数gca可用于获取特定数字的轴句柄,但此功能似乎没有记录。例如,调用gca(3)来获取图3的轴句柄。我以前认为我可以调用gca([1:4])来获取所有四个轴句柄,但这似乎不起作用。

我知道我可以通过调用get来使用get([1:4],'currentaxes'),它返回一个轴句柄的单元格数组。但是,我还没有找到将对象的单元格数组转换为对象数组的方法。

我正在使用MATLAB R2015a。

4 个答案:

答案 0 :(得分:3)

构建轴后:

figure(1); axes();
figure(2); axes();
figure(3); axes();
单行很有趣:

linkaxes(arrayfun(@(k) get(k,'CurrentAxes'), 1:3));

稍后修改

显然,这仅适用于旧式图形(其中图形对象的句柄是double个数字)。新的句柄图形(作为正确的对象)无法通过arrayfun

在单个数组中累积

http://www.mathworks.com/help/matlab/graphics_transition/graphics-handles-are-now-objects-not-doubles.html

也许更简单的单行:

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');