以下計算器qestion:如何從Matlab中的座標軸中識別傳說?
Matlab: How to obtain all the axes handles in a figure handle?
標識如何從在Matlab中的人物獲得句柄所有軸。但是,這個列表還將包含圖例句柄,至少在R2008a中,它們看起來也是座標軸。我怎樣才能以(編程)的方式告訴來自真實座標軸的圖例在一個座標軸手柄中?
以下計算器qestion:如何從Matlab中的座標軸中識別傳說?
Matlab: How to obtain all the axes handles in a figure handle?
標識如何從在Matlab中的人物獲得句柄所有軸。但是,這個列表還將包含圖例句柄,至少在R2008a中,它們看起來也是座標軸。我怎樣才能以(編程)的方式告訴來自真實座標軸的圖例在一個座標軸手柄中?
1)默認情況下,圖例的Tag
屬性爲'Legend'。當然,沒有承諾它沒有改變。
get(l)
....
BusyAction: 'queue'
HandleVisibility: 'on'
HitTest: 'on'
Interruptible: 'off'
Selected: 'off'
SelectionHighlight: 'on'
**Tag: 'legend'**
Type: 'axes'
UIContextMenu: 200.0018
UserData: [1x1 struct]
....
2)的另一個差別(這是更健壯)是常規的軸不必String
屬性,但圖例做。我不確定是否還有其他類型的對象也具有String
屬性。例如:
plot(magic(3));legend('a','v','b');
allAxesInFigure = findall(f,'type','axes')
b = isprop(allAxesInFigure,'String')
你可以通過調用驗證:
GET(GCA, '字符串')
???錯誤使用==> get
'axes'類中沒有'String'屬性。
但在另一方面,傳說有是這樣的屬性。這就是爲什麼它更健壯。
plot(magic(3)); l = legend('a','b','c');
get(l,'String')
ANS = 'A' 'B' 'C'
3)我建議在更廣的範圍內來解決這一點。只需通過存儲手柄來跟蹤您創建的圖例和座標軸。 也就是說,而非編碼,如:
plot(magic(3));
legend('a','v','b');
plot(magic(5));
legend('a','v','b','c','d');
這樣的代碼:
p(1) = plot(magic(3));
l(1) = legend('a','v','b');
p(2) = plot(magic(5));
l(2) = legend('a','v','b','c','d');
謝謝Andrey,你的回答非常好,但我認爲Nzbuu更接近我正在尋找的答案。 – crobar 2012-01-31 09:33:21
@crobar,多數民衆贊成,我明白。事實上Nzbuu的解決方案中有一些優雅:) – 2012-01-31 15:06:30
只要稍微修改的my answer at the stackoverflow question you mentioned代碼:
axesHandles = get(fig, 'Children');
classHandles = handle(axesHandles);
count = length(axesHandles);
isLegend = false(1, count);
for i = 1:count
isLegend(i) = strcmp(class(classHandles(i)), 'scribe.legend') == 1;
end
legendHandles = axesHandles(isLegend);
不幸的是,這個解決方案取決於實施細節。
請注意,您還需要注意'colorbar'軸。 – Nzbuu 2012-01-31 15:51:12