2012-02-17 43 views
13

मुझे MATLAB उपयोगकर्ताओं के लिए एक बहुत ही सरल सवाल है:MATLAB: लोड किए गए आकृति के लाइन गुणों को बदलना?

यदि मैं लोड कमांड के साथ एक आकृति फ़ाइल (.fig) लोड करता हूं, तो क्या कमांड लाइन से प्लॉट लाइन गुणों को बदलने का कोई तरीका है? (चौड़ाई, रंग, मार्कर, आदि)

पीडी: पहले दो विकल्पों Defining the Color of Lines for Plotting On this page… में जानकारी के अनुसार केवल यदि आप साजिश आदेश का उपयोग काम करते हैं। जाहिर है कि यदि आप आंकड़ा लोड करते हैं तो वे बेकार हैं।

उत्तर

17
के लिए सभी लाइन FINDOBJ समारोह के साथ मौजूदा आंकड़े पर वस्तुओं

आप हैंडल प्राप्त कर सकते हैं:

hline = findobj(gcf, 'type', 'line'); 

तो फिर तुम सब लाइन के लिए कुछ संपत्ति को बदल सकते हैं वस्तुओं:

set(hline,'LineWidth',3) 

या सिर्फ उनमें से कुछ के लिए:

set(hline(1),'LineWidth',3) 
set(hline(2:3),'LineStyle',':') 
idx = [4 5]; 
set(hline(idx),'Marker','*') 
+0

बहुत बहुत धन्यवाद! यह ठीक काम किया! – aarelovich

2

किसी आकृति में वस्तुओं को कुशल बनाने के लिए, आपको अपने हैंडल तक पहुंच की आवश्यकता है। यदि आप प्लॉटिंग फ़ंक्शंस का उपयोग करके एक आकृति बनाते हैं, तो ये आपके लिए हैंडल वापस कर देगा। जब आप एक आकृति खोल रहे हैं, जैसा कि आपका मामला है, तो आपको उस विशिष्ट तत्व को संभालने के लिए ग्राफ़िक ऑब्जेक्ट्स पेड़ का पालन करना होगा, जिसे आप कुशल बनाना चाहते हैं।

This page में ग्राफिक्स ऑब्जेक्ट्स की संरचना के बारे में जानकारी है।

हैंडल आप अपने आंकड़ा पर निर्भर करेगा चाहते हैं के लिए पथ, लेकिन, एक उदाहरण के रूप में, यदि अपने आंकड़ा एक सरल plot आदेश का उपयोग कर बनाया गया था, यह एक तरह से लाइन गुणों को बदलने के होगा:

x = 0:0.1:2; 
plot(x,sin(x)); 

fig = gcf % get a handle to the current figure 
% get handles to the children of that figure: the axes in this case 
ax = get(fig,'children') 
% get handles to the elements in the axes: a single line plot here 
h = get(ax,'children') 
% manipulate desired properties of the line, e.g. line width 
set(h,'LineWidth',3) 
+0

जानकारी के लिए धन्यवाद। मैं ध्यान में रखूंगा। हालांकि मुझे ऊपर विकल्प, अधिक सहज ज्ञान मिलता है। – aarelovich

2

इसके अलावा जवाब @yuk लिए, यदि आप एक कथा के रूप में अच्छी तरह से तैयार है,

hline = findobj(gcf, 'type', 'line'); 

N x 3 लाइनों वापस आ जाएगी (या अधिक सटीक - lines plotted + 2x lines in legend)। मैं यहां केवल उस मामले में देखता हूं जब प्लॉट की सभी लाइनें पौराणिक कथाओं में भी होती हैं।5 लाइनों (हम उन्हें ध्यान दें 1 to 5 हैं) साजिश रची और कथा, जोड़ा आप

hline: 
1 : 5 th line (mistical)  
2 : 5 th line (in legend) 
3 : 4 th line (mistical)  
4 : 4 th line (in legend) 
5 : 3 th line (mistical)  
6 : 3 th line (in legend) 
7 : 2 th line (mistical)  
8 : 2 th line (in legend) 
9 : 1 th line (mistical)  
10: 1 th line (in legend) 
11: 5 th line (in plot) 
12: 4 th line (in plot) 
13: 3 th line (in plot) 
14: 2 th line (in plot) 
15: 1 th line (in plot) 

एक समाधान (शुक्रवार शाम विलंब) के रूप में होगा मैं इस बनाया के मामले में :

अनुक्रमण अजीब है छोटा बच्चा:

समाधान 1: आप अगर वहाँ एक पौराणिक कथा है और कितने लिन कथा

का पता लगाने पुनर्स्थापित करने के लिए नहीं करना चाहते हैं तों साजिश रची है:

hline = findobj(gcf, 'type', 'line'); 
isThereLegend=(~isempty(findobj(gcf,'Type','axes','Tag','legend'))) 

if(isThereLegend) 
    nLines=length(hline)/3 
else 
    nLines=length(hline) 
end 

प्रत्येक पंक्ति के लिए सही हैंडल खोजने के लिए और है कि रेखा (यह इसी कथा लाइन के लिए भी लागू होगा) के लिए चीजें करते

for iterLine=1:nLines 
    mInd=nLines-iterLine+1 
    if(isThereLegend) 
     set(hline([(mInd*2-1) (mInd*2) (2*nLines+mInd)]),'LineWidth',iterLine) 
    else 
    set(hline(mInd),'LineWidth',iterLine)  
    end 
end 

इस के साथ हर i-th लाइन बनाता है width=i और यहां आप स्वचालित संपत्ति को बदल सकते हैं;

समाधान 2: रखें यह आसान

कथा से छुटकारा, लाइनों की देखभाल, रीसेट कथा।

legend off 
hline = findobj(gcf, 'type', 'line'); 
nLines=length(hline) 

for iterLine=1:nLines 
    mInd=nLines-iterLine+1 
    set(hline(mInd),'LineWidth',iterLine)  
end 
legend show 

यह उन परिस्थितियों के लिए उपयुक्त नहीं हो सकता है जब कथा कुछ speciffic जगह आदि

0

में रखा जाना चाहिए आप व्यूअर में लाइन पर क्लिक करें, और वहाँ गुणों को बदलने के भी सिर्फ सही कर सकते हैं। यह संबंधित 'किंवदंती' प्रविष्टि को भी बदलता है (कम से कम यह 2014 बी में करता है)।

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

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