一次获取多个坐标轴句柄
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
:
无法将新的句柄图形(是适当的对象)累积在单个数组中
也许更简单one-liner:
linkaxes(findobj(1:3,'Type','Axes'));
会工作...
除了已经发布的答案之外,一个可能的 one-line 解决方案是:
linkaxes(findobj('type','axes'))
它还允许在没有 axes
的情况下隐含地阻止考虑 figure
。
希望对您有所帮助。
如果您只想 link 轴的特定子集并且它们作为对象存储在单元格中:
linkaxes([all_axes{:}], 'x');
我正在寻找一种单行代码来一次获得多个轴句柄在对象数组中,以便它可以传递到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
:
也许更简单one-liner:
linkaxes(findobj(1:3,'Type','Axes'));
会工作...
除了已经发布的答案之外,一个可能的 one-line 解决方案是:
linkaxes(findobj('type','axes'))
它还允许在没有 axes
的情况下隐含地阻止考虑 figure
。
希望对您有所帮助。
如果您只想 link 轴的特定子集并且它们作为对象存储在单元格中:
linkaxes([all_axes{:}], 'x');