一次获取多个坐标轴句柄

Get multiple axes handles at once

我正在寻找一种单行代码来一次获得多个轴句柄在对象数组中,以便它可以传递到linkaxes。我专门寻找不使用循环的单行语句。我知道我过去曾使用几个嵌套函数完成过此操作,但我无法弄清楚我做了什么。

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

我知道我可以通过调用 get([1:4],'currentaxes') 来使用 get,其中 returns 是轴处理的元胞数组。但是,我还没有想出将对象元胞数组转换为对象数组的方法。

我正在使用 MATLAB R2015a。

这个怎么样?

cell_of_axes = get([1:4], 'currentaxes');
array_of_axes = [cell_of_axes{:}];
linkaxes(array_of_axes);

构建轴后:

figure(1); axes();
figure(2); axes();
figure(3); axes();

one-liners很有趣:

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

稍后编辑

显然这仅适用于 old-style 图形(其中图形对象的句柄是 double 数字)。 arrayfun:

无法将新的句柄图形(是适当的对象)累积在单个数组中

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

也许更简单one-liner:

linkaxes(findobj(1:3,'Type','Axes'));

会工作...

除了已经发布的答案之外,一个可能的 one-line 解决方案是:

linkaxes(findobj('type','axes'))

它还允许在没有 axes 的情况下隐含地阻止考虑 figure

希望对您有所帮助。

如果您只想 link 轴的特定子集并且它们作为对象存储在单元格中:

linkaxes([all_axes{:}], 'x');