2012-12-03 31 views
34
t = 0 : 0.01 : 2 * pi; 
s = sin(t); 
c = cos(t); 
m = -sin(t); 

hold on; 
plot(t, s, 'r'); 
plot(t, c, 'b'); 
plot(t, m, 'g'); 
hold off; 

legend('', 'cosine', ''); 

The Plottingसाजिश में वक्र के केवल एक विशिष्ट सबसेट के लिए किंवदंती कैसे दिखाएं?

मेरी साजिश में कई घटता रहे हैं। मैं केवल उनमें से कुछ के लिए किंवदंती प्रदर्शित करना चाहता हूं। मैं यह कैसे करुं?

उदाहरण के लिए, मैं ऊपर की साजिश में दिखाई देने वाले कोसाइन वक्र के लिए केवल किंवदंती कैसे बना सकता हूं? जब मैं खाली तीसरा पैरामीटर जोड़ने के बजाय legend() फ़ंक्शन legend('', 'cosine'); पर कॉल करता हूं, तो वास्तव में तीसरी हरी रेखा को किंवदंती से हटा दिया जाता है। लेकिन यह मेरी समस्या का समाधान नहीं करता है, क्योंकि अवांछित लाल रेखा दिखाई देती है।

उत्तर

26

बस वांछित किंवदंती हैंडल एक चर में हैंडल करें और सरणी को legend पर पास करें।

enter image description here

+2

नोट नहीं करना चाहती है कि इस दृष्टिकोण के साथ, आप एक बार किंवदंती को बंद करें और इसे यूआई के माध्यम से वापस चालू करें, सभी लाइनें किंवदंती में वापस आ जाएंगी। – Jonas

+0

@ जोनास इसे इंगित करने के लिए धन्यवाद। इस तरह की छवि के लिए –

+0

पीएनजी बेहतर है। –

5

के अपने चर के साथ शुरू करते हैं और उन्हें साजिश:

t = 0 : 0.01 : 2 * pi; 
s = sin(t); 
c = cos(t); 
m = -sin(t); 

figure; 
hold ('all'); 
hs = plot(t, s); 
hc = plot(t, c); 
hm = plot(t, m); 

hold on; 
plot(t, s, 'r'); 
h2 = plot(t, c, 'b'); % # Storing only the desired handle 
plot(t, m, 'g'); 
hold off; 

legend(h2, 'cosine'); % # Passing only the desired handle 

आप इस भूखंड मिलना चाहिए: आपके मामले में, यह केवल एक मान, जैसे इतना होगा

IconDisplayStyle नामक एक संपत्ति है। यह काफी गहरा दफनाया गया है। पथ आप पालन करने की आवश्यकता है:

लाइन -> एनोटेशन -> LegendInformation -> IconDisplayStyle

IconDisplayStyle संपत्ति off करने से आप उन लाइन को छोड़ देंगे। उदाहरण के तौर पर, मैं hs की किंवदंती को बंद करने जा रहा हूं।

hsAnno = get(hs, 'Annotation'); 
hsLegend = get(hsAnno, 'LegendInformation'); 
set(hsLegend, 'IconDisplayStyle', 'off'); 

बेशक आप आगे बढ़ सकते हैं और यह इस तरह कार्य करें:

set(get(get(hs, 'Annotation'), 'LegendInformation'), 'IconDisplayStyle', 'off'); 

लेकिन मैं इसे बहुत कठिन समझने के लिए लगता है।

अब, legend फ़ंक्शन बस hs छोड़ देगा।

इस के साथ मेरे कोड समाप्त: enter image description here

संपादित करें:

legend('cosine', 'repeat for this handle') 

आप इस दे देंगे इस तरह hc की DisplayName गुण को सेट:

जोनास टिप्पणी में एक अच्छा सुझाव था
set(hc, 'DisplayName', 'cosine'); 
legend(gca, 'show'); 

आपको आवश्यक किंवदंती देगा। आप 'cosine' के साथ अपने लाइन हैंडल को जोड़ देंगे। तो, आप केवल 'off' या 'show' पैरामीटर के साथ किंवदंती को कॉल कर सकते हैं।

+2

पर अनुशंसित है कि मैं 'DisplayName' सेट करने का सुझाव देता हूं नामों के साथ 'किंवदंती' को कॉल करने के बजाए लाइन हैंडल की संपत्ति, ताकि जीयूआई में किंवदंती को बंद/चालू करने के बाद परिणाम वही होगा। – Jonas

+0

धन्यवाद @ जोनास। मेरा जवाब अपडेट किया गया। – HebeleHododo

1

तुम बस जिसमें आदेश को बदल सकता है घटता साजिश रची है और पहले की अवस्था को कथा लागू होते हैं:

t = 0 : 0.01 : 2 * pi; 
s = sin(t); 
c = cos(t); 
m = -sin(t); 

plot(t,c,t,s,t,m) % cosine is plotted FIRST 
legend('cosine') % legend for the FIRST element 

अगर मैं कोज्या और -Sine के लिए एक पौराणिक कथा में डाल करना चाहते हैं:

plot(t,c,t,m,t,s) % cosine and -sine are first and second curves 
legend('cosine', '-sine') 
31

मुझे हैंडल मानों को संग्रहीत करना पसंद नहीं है, यह मेरे गलतियों में बहुत सारे ग्राफ होने पर गड़बड़ हो जाता है। इसलिए मुझे एक और समाधान मिला।

t = 0 : 0.01 : 2 * pi; 
s = sin(t); 
c = cos(t); 
m = -sin(t); 
hold on; 
plot(t, s, 'r', 'HandleVisibility','off'); % Plotting and telling to hide legend handle 
h2 = plot(t, c, 'b', 'DisplayName', 'cosine'); % Plotting and giving legend name 
plot(t, m, 'g', 'HandleVisibility','off'); % Plotting and telling to hide legend handle 

legend show % Generating legend based on already submitted values 

यह मुझे वही ग्राफ देता है जैसा कि ईटन टी के उत्तर में दिखाया गया है।

यह ध्यान दिया जाना चाहिए कि यह अन्य matlab कार्यों को भी प्रभावित करेगा, उदाहरण के लिए cla केवल पौराणिक कथाओं पर उल्लिखित भूखंडों को हटा देगा। इसके बारे में अधिक जानकारी के लिए Matlab दस्तावेज़ में हैंडल दृश्यता के लिए खोजें।

+3

+1 सुरुचिपूर्ण समाधान मैंने इसका इस्तेमाल किया। – neuronet

+2

ने इसे भी इस्तेमाल किया क्योंकि मैं गतिशील रूप से नामित वक्र का उपयोग करता हूं (मानक विचलन को साकार करने के लिए बहुत अच्छा काम करता है लेकिन उन्हें किंवदंती में छुपाता है)। – gaborous

+2

सबसे अच्छा समाधान अगर कोई यूआई में सीधे बदलाव करना चाहता है। –

1

सेबेस्टियन के उत्तर का विस्तार करने के लिए, मेरे पास एक विशेष मामला है जहां मैं दो प्रारूपों में से एक में कई लाइनों की योजना बना रहा हूं (ट्रेस बीम या तो संपीड़न या तनाव में) और जब तक कि पौराणिक कथाओं में विशिष्ट साजिश हैंडल प्लॉट करने में सक्षम था लेबल एक ही लंबाई

for ii=1:nBeams 
    if X(ii)<0 %Bars with negative force are in compession 
     h1=plot(linspace(beamCord(ii,1),beamCord(ii,3)),... 
      linspace(beamCord(ii,2),beamCord(ii,4)),'r:'); 
    elseif X(ii)>0 %Bars with positive force are in tension 
     h2=plot(linspace(beamCord(ii,1),beamCord(ii,3)),... 
      linspace(beamCord(ii,2),beamCord(ii,4)),'b'); 
    end 
end 

legend([h1;h2],['Compression';'Tension ']); 

जहां 'तनाव' के पीछे 4 रिक्त स्थान जोड़े गए हैं ताकि वर्णों की संख्या सुसंगत हो।

-2

त्वरित में भूखंड हैक:

  1. कट सब कुछ आप कथा कथा
  2. में प्रदर्शित करने के लिए लागू करें
  3. पेस्ट
+0

कृपया स्पष्ट अंतर्निहित स्वरूपण का उपयोग करें :) –

+0

कट और पेस्ट करके आपका क्या मतलब है? क्या आपका मतलब है 'लीजेंड' कमांड के बाद अन्य 'प्लॉट' कमांड को ले जाएं? प्रदर्शित करने के लिए एक कोड स्निपेट प्रदान करें। – Cecilia