2011-09-06 21 views
6

में सेट करने के लिए लाइन का रंग और स्टाइल ऑर्डर सेट करें जब आप DefaultAxesColorOrder और DefaultAxesLineStyleOrder सेट करते हैं तो MATLAB पहली शैली के साथ सभी रंगों के माध्यम से पहले चक्र को फिर से दूसरी शैली के साथ सभी रंगों के माध्यम से चक्र करेगा।MATLAB: समानांतर

यह documentation या related question देखें।

मैं क्या करना चाहता हूं रंगीन क्रम और स्टाइल ऑर्डर को स्वतंत्र रूप से लागू करने के लिए सेट करना है।

उदाहरण के लिए, अगर मैं '-|--|:' करने के लिए [1 0 0; 0 1 0; 0 0 1] और DefaultAxesLineStyleOrder करने के लिए DefaultAxesColorOrder निर्धारित करते हैं, लाइनों 'r-', 'g-', 'b-', 'r--', 'g--', 'b--', 'r:', 'g:', 'b:' हो जाएगा। मैं लाइनों को 'r-', 'g--', 'b:' होना चाहता हूं।

उत्तर

4

मुझे सीधे बॉक्स से बाहर करने का कोई तरीका नहीं दिख रहा है। सीधा तरीका प्रत्येक पंक्ति के लिए रंग/शैली को मैन्युअल रूप से सेट करना है।

यहां एक और स्वचालित समाधान है। एक उदाहरण के दस्तावेज़ से लिया साथ शुरू करते हैं:

%# defaults are set sometime before 
set(0, 'DefaultAxesColorOrder',[1 0 0;0 1 0;0 0 1], ... 
     'DefaultAxesLineStyleOrder','-|--|:') 

%# do plotting as usual 
t = 0:pi/20:2*pi; 
a = zeros(length(t),9); 
for i = 1:9 
    a(:,i) = sin(t-i/5)'; 
end 
h = plot(t,a); 

के रूप में आप विस्तार से बताया अपने प्रश्न में, डिफ़ॉल्ट व्यवहार पहले रंगों के माध्यम से चक्र करने के लिए है, तो लाइन शैलियों। आप उन्हें स्वतंत्र रूप से लागू करने के लिए चाहते हैं, कोशिश निम्नलिखित:

c = num2cell(get(0,'DefaultAxesColorOrder'),2); 
l = cellstr(get(0,'DefaultAxesLineStyleOrder')); 
set(h, {'Color'}, c(rem((1:numel(h))-1,numel(c))+1), ... 
    {'LineStyle'}, l(rem((1:numel(h))-1,numel(l))+1)) 

आप शायद लपेट कर सकते हैं कि सुविधाजनक पहुँच के लिए एक समारोह में (आप अभी भी ग्राफिक वस्तुओं लाइनों को हैंडल पास करना):

function applyColorLineStyleIndependently(h) 
    %# ... 
end 

enter image description here

+0

के माध्यम से बहुत स्केल करता हूं! यह बहुत अच्छा है! मैंने 'सेट' में सेल एरे का कभी भी उपयोग नहीं किया। – yuk

0

अम्रो का दृष्टिकोण अच्छी तरह से काम करता है। एक नोट के रूप में, आपको इसे करने के लिए डिफ़ॉल्ट सेट करने की आवश्यकता नहीं है। आप इस तरह कुछ कर सकते हैं

col = mycolors(); % defines RGB colors scaled to [0,1] 

i = 1; 
c(:,i) = col.royal_blue; i = i+1; 
c(:,i) = col.crimson; i = i+1; 
c(:,i) = col.medium_sea_green; i = i+1; 
c(:,i) = col.coral; i = i+1; 
c(:,i) = col.dark_magenta; i = i+1; 

colord = num2cell(c',2); 
lineord = {'-' '--' '-.'}'; 

set(h,{'Color'}, colord(rem((1:numel(h))-1,numel(colord))+1), ... 
     {'LineStyle'}, lineord(rem((1:numel(h))-1,numel(lineord))+1)) 
set(h,'LineWidth',2) 

संपादित करें: mycolors() फ़ंक्शन घर बनाया गया है। मैं

colors.maroon = [128,0,0]; 
colors.dark_red = [139,0,0]; 
colors.brown = [165,42,42]; 
... 

(रंग के नाम इस http://www.rapidtables.com/web/color/RGB_Color.htm से हैं) को परिभाषित। फिर मैं उन्हें

c = fieldnames(colors); 
for i = 1:numel(c) 
    colors.(c{i}) = colors.(c{i})/255; 
end 
+0

धन्यवाद। Mycolors क्या काम करता है? मुझे यह नहीं मिला और न ही MATLAB या FileExchange में। क्या यह आपका अपना कोड है? – yuk