2012-05-24 17 views
9

के दौरान किंवदंती लेबल असाइन करना मैं एक सामान्य MATLAB स्कैटरप्लॉट प्रारूप में डेटा प्लॉट कर रहा हूं। आमतौर पर जब कई डेटासेट की साजिश रचने, मैं आदेश 'पर पकड़,' का प्रयोग करेंगे, और फिर इस के बाद डेटा के प्रत्येक, साजिश मेरी कथा पाने के लिए:MATLAB ग्राफ़ प्लॉटिंग: साजिश

legend('DataSet1', 'DataSet2') % etcetera 

हालांकि, (एकाधिक) डेटासेट मैं साजिश रचने कर रहा हूँ एक ही अक्ष पर हर बार एक ही डेटासेट आवश्यक नहीं हैं। मैं एक ही अक्ष पर डेटा के छह अलग-अलग सेटों की साजिश रच रहा हूं, और इनमें से कोई भी संयोजन दिखाया जा सकता है (उपयोगकर्ता द्वारा प्रदर्शित करने के लिए क्या चुनता है)। जाहिर है कि अगर मैं किंवदंती पारंपरिक तरीके से स्थापित करना चाहता हूं तो यह बहुत कुछ होगा।

मैं वास्तव में क्या करना चाहता हूं, प्रत्येक डेटासेट को नाम दें क्योंकि इसे प्लॉट किया गया है ताकि बाद में मैं दिखाए जा रहे सभी डेटा की एक किंवदंती को कॉल कर सकूं।

... या, इस समस्या का कोई अन्य समाधान जो कोई भी सोच सकता है ..?

उत्तर

11

एक विकल्प तो जैसे 'UserData' संपत्ति का लाभ लेने के लिए है की तरह कुछ की कोशिश कर सकते हैं:

figure; 
hold on 
plot([0 1], [1 0], '-b', 'userdata', 'blue line') 
plot([1 0], [1 0], '--r', 'userdata', 'red dashes') 

% legend(get(get(gca, 'children'), 'userdata'))      % wrong 
legend(get(gca, 'children'), get(get(gca, 'children'), 'userdata')) % correct 

संपादित करें: के रूप में प्रश्नकर्ता ने कहा, मूल संस्करण सकता है आदेश से बाहर निकलें। इसे ठीक करने के लिए, निर्दिष्ट करें कि कौन सा हैंडल किस लेबल के साथ जाता है (निश्चित संस्करण में, यह सही क्रम में है)।

+0

यह विधि रंगों और नामों को मिश्रित करने के लिए प्रतीत होती है ... जब तक कि मैं इसे गलत तरीके से कार्यान्वित नहीं कर रहा हूं? – CaptainProg

+0

आपका क्या मतलब है, बिल्कुल ... आह, मैं देखता हूं। ठीक है, नया संस्करण आज़माएं! – tmpearce

+0

शानदार। धन्यवाद। – CaptainProg

3

आप निम्न

for k = 1:10 

    h(k) = plot(...); 
    name{k} = ['condition ' num2str(k)]; 

end 

legend(h, name); 
+0

यह भी काम करता है। – CaptainProg

18

आप प्रत्येक भूखंड के लिए DisplayName गुण सेट करने के लिए सक्षम होना चाहिए:

figure 
hold on 
plot(...,'DisplayName','DataSet1') 
plot(...,'DisplayName','DataSet2') 
legend(gca,'show') 

http://www.mathworks.com/help/matlab/ref/line_props.html

साइड नोट: मैं देखने के लिए आंकड़ा हो रही द्वारा इस तरह थोड़ा चाल का एक बहुत कुछ मिल गया है जिस तरह से मैं चाहता हूं, फिर चित्रा के "फ़ाइल" मेनू विकल्प "एम-फाइल जेनरेट करें ..." का चयन करें और उत्पन्न आउटपुट कोड का निरीक्षण करें।

+0

अच्छी तरफ ध्यान दें! –

10

एक plot() संपत्ति के रूप में उपयोग 'DisplayName', और जैसा कि

legend('-DynamicLegend'); 

मेरे कोड इस तरह दिखता है आपकी कथा कहते हैं:

x = 0:h:xmax;         %// get an array of x-values 
y = someFunction;        %// function 
plot(x, y, 'DisplayName', 'Function plot 1'); %// plot with 'DisplayName' property 

legend('-DynamicLegend',2);     %// '-DynamicLegend' legend 

स्रोत: http://undocumentedmatlab.com/blog/legend-semi-documented-feature/

+3

यह या जोनाथन का जवाब स्वीकार्य होना चाहिए! – Ela782

0

पाश के लिए एक बनाओ। लेकिन लूप के पहले, एक सरणी बनाओ।

%for example 

legendset = {} 

for i = 1:10 

%blabla 
%Then in the fore loop say: 

legendset = [legendset;namedata(i)] 

%It puts all names in a column of legendset. 
%Make sure namedata are characters. 

%foreloop ends 
end 

%Then after the foreloop say: 

legend(legendset). 
संबंधित मुद्दे