2016-01-05 65 views
1

我正在尋找一個單線程來獲取多個軸手柄在對象數組中,以便它可以傳遞到linkaxes。我特別尋找不使用循環的單行語句。我知道我在過去使用過一對嵌套函數,但我無法弄清楚我做了什麼。一次獲取多個軸手柄

函數gca可用於獲取特定圖形的軸手柄,但該功能似乎沒有記錄。例如,請致電gca(3)以獲取圖3的軸手柄。我認爲在過去,我可以撥打gca([1:4])以獲得所有四個軸手柄,但這似乎不起作用。

我知道我可以通過調用get([1:4],'currentaxes')來使用get,它返回一個軸手柄的單元數組。但是,我還沒有想出將對象的單元數組轉換爲對象數組的方法。

我正在使用MATLAB R2015a。

+0

數字和/或軸是否以無法存放手柄的方式生成? – excaza

回答

3

除已發佈的答案外,可能的單行解決方案可能是:

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

它也允許隱含地防止考慮figure沒有axes

希望這會有所幫助。

2

這個怎麼樣?

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

嗯,這確實有效,並且肯定比for循環更好,儘管我希望得到一個聲明。這可能不可能。 –

+0

是的MATLAB語法不允許你做一個單線程,因爲你不能將{:}添加到調用的結尾以獲取(...)。 –

+1

@ThomasIbbotson [that not strict true](http://stackoverflow.com/questions/3627107/how-can-i-index-a-matlab-array-returned-by-a-function-without-first-assigning-它) – excaza

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

會工作...

+0

我被告知我需要設置''UniformOutput''爲'false',這會導致一個單元格數組,因此與'linkaxes'不兼容。這不會發生在你身上嗎? –

+0

@DavidK你有沒有斧頭的人物?如果是,請將它們從陣列中移除(例如從1:3)。 –

+0

@DavidK另外:它是否適用於我給出的示例代碼? –