2012-01-30 17 views
6

निम्नलिखित stackoverflow qestion:Matlab में axes से किंवदंतियों को कैसे बताना है?

Matlab: How to obtain all the axes handles in a figure handle?

की पहचान करता है मैटलैब में एक आंकड़े से कुल्हाड़ियों सभी को हैंडल कैसे प्राप्त करें। हालांकि, इस सूची में कम से कम R2008a में किंवदंतियों को हैंडल भी शामिल होंगे, जो धुरी भी दिखाई देते हैं। मैं axes हैंडल के वेक्टर में वास्तविक साजिश axes से किंवदंतियों (प्रोग्रामेटिक रूप से) कैसे बता सकते हैं?

+1

ध्यान दें कि आपको 'रंगीन' अक्षों का भी ध्यान रखना होगा। – Nzbuu

उत्तर

12

linkaxes से, कोड आप चाहते है:

ax = findobj(gcf,'type','axes','-not','Tag','legend','-not','Tag','Colorbar'); 

यह सभी के हैंडल वापस आ जाएगी वर्तमान आंकड़े में डेटा अक्ष।

+0

लेकिन अगर किसी ने दुर्भावनापूर्ण अक्षों के टैग को बदल दिया तो क्या होगा? –

+1

@Andrey: फिर वे पात्र हैं कि कोड विफल रहता है। '-not' विकल्प के लिए – Jonas

+0

+1। मुझे इसके बारे में पता नहीं था। – Jonas

6

1) डिफ़ॉल्ट रूप से Tag किंवदंती की संपत्ति 'लीजेंड' है। बेशक, कोई वादा नहीं है कि यह नहीं बदला गया है।

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

आप इसे फोन करके सत्यापित कर सकते हैं:

प्राप्त (GCA, 'स्ट्रिंग')
??? ==>
का उपयोग करने में त्रुटि 'अक्ष' वर्ग में कोई 'स्ट्रिंग' संपत्ति नहीं है।

लेकिन दूसरी तरफ, वहाँ किंवदंतियों के लिए इस तरह के एक संपत्ति है। यही कारण है कि यह अधिक मजबूत है।

plot(magic(3)); l = legend('a','b','c'); 
get(l,'String') 

ans = 'एक' 'बी' 'सी'

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

धन्यवाद एंड्री, आपका जवाब उत्कृष्ट है, लेकिन मुझे लगता है कि Nzbuu उस उत्तर के करीब है जिसे मैं ढूंढ रहा था। – crobar

+0

@ क्रोबर, ठीक है, मैं समझता हूं। वास्तव में Nzbuu के समाधान में कुछ लालित्य है :) –

0

बस थोड़ा 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); 

दुर्भाग्य से, इस समाधान कार्यान्वयन विवरण पर निर्भर करता है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^