matlab - समय - रेखांश अक्षांश




विभिन्न रंगीन रेखाओं को स्वचालित रूप से साजिश करें (4)

असल में, रंगों को रंग प्राप्त करने के लिए एक सभ्य शॉर्टकट विधि hold all; hold on; जगह में hold on; । MATLAB के डिफ़ॉल्ट रंगरूप के माध्यम से प्रत्येक क्रमिक plot घुमाएगी (स्वचालित रूप से आपके लिए)।

hold पर MATLAB साइट से:

hold all को साजिश और वर्तमान रेखा रंग और रेखा शैली रखती है ताकि बाद के साजिश के आदेश सूची की शुरुआत में ColorOrder और LineStyleOrder संपत्ति मानों को रीसेट न करें। प्लॉटिंग कमांड पूर्वनिर्धारित रंगों और लिनेस्टाइलों के माध्यम से साइकिल चलाना जारी रखते हैं, जहां से आखिरी साजिश सूची में रुक गई थी।

मैं एक ही ग्राफ पर कई कर्नेल घनत्व अनुमानों को साजिश करने की कोशिश कर रहा हूं, और मैं चाहता हूं कि वे सभी अलग-अलग रंग हों। मेरे पास एक स्ट्रिंग 'rgbcmyk' का उपयोग करके एक 'rgbcmyk' समाधान है और प्रत्येक अलग साजिश के लिए इसके माध्यम से कदम 'rgbcmyk' रहा है, लेकिन मैं 7 पुनरावृत्तियों के बाद डुप्लिकेट करना शुरू कर देता हूं। क्या ऐसा करने के लिए और अधिक रंग विकल्पों के साथ एक आसान / अधिक कुशल तरीका है?

for n=1:10
 source(n).data=normrnd(rand()*100,abs(rand()*50),100,1); %generate random data
end
cstring='rgbcmyk'; % color string
figure
hold on
for n=1:length(source)
 [f,x]=ksdensity(source(n).data); % calculate the distribution
 plot(x,f,cstring(mod(n,7)+1))  % plot with a different color each time
end

देर जवाब, लेकिन दो चीजें जोड़ने के लिए:

  • 'ColorOrder' प्रॉपर्टी को बदलने और 'DefaultAxesColorOrder' साथ वैश्विक डिफ़ॉल्ट सेट करने के तरीके के बारे में जानकारी के लिए, इस पोस्ट के निचले हिस्से में "परिशिष्ट" देखें।
  • यदि आपके पास छवि प्रसंस्करण टूलबॉक्स का उपयोग करने के लिए कोई दृश्यमान रूप से अलग रंग उत्पन्न करने के लिए MATLAB सेंट्रल फ़ाइल एक्सचेंज पर एक शानदार टूल है। विवरण के लिए पढ़ें।

ColorOrder axes प्रॉपर्टी MATLAB को स्वचालित रूप से रंगों की सूची के माध्यम से चक्रों की सूची के माध्यम से चक्र की अनुमति देता है (फिर, एक विशिष्ट धुरी के लिए ColorOrder को set / get करने के लिए नीचे दिए गए परिशिष्ट को देखें या वैश्विक रूप से DefaultAxesColorOrder माध्यम से)। हालांकि, डिफ़ॉल्ट रूप से MATLAB केवल चक्रों की एक छोटी सूची ( केवल R2013b के रूप में 7 ) को चक्र के माध्यम से निर्दिष्ट करता है , और दूसरी ओर यह अधिक डेटा श्रृंखला के लिए रंगों का एक अच्छा सेट खोजने में समस्याग्रस्त हो सकता है। 10 भूखंडों के लिए, आप स्पष्ट रूप से डिफ़ॉल्ट ColorOrder पर भरोसा नहीं कर सकते हैं।

एन दृष्टि से अलग रंगों को परिभाषित करने का एक शानदार तरीका MATLAB केंद्रीय फ़ाइल फ़ाइल एक्सचेंज पर "अधिकतम अनुमानित- पृथक रंग उत्पन्न करें" (जीएमपीडीसी) प्रस्तुत करना है । यह लेखक के अपने शब्दों में सबसे अच्छा वर्णन किया गया है:

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

उदाहरण के लिए, जब 25 रंग अनुरोध किए जाते हैं:

जीएमपीडीसी सबमिशन को मैथवर्क्स के आधिकारिक ब्लॉग पर 2010 में पिक ऑफ द वीक के रूप में चुना गया था क्योंकि रंगों की मनमानी संख्या (MATLAB के 7 डिफ़ॉल्ट रंगों में निर्मित) के विपरीत अनुरोध करने की क्षमता थी। उन्होंने स्टार्टअप पर MATLAB के ColorOrder सेट करने के लिए उत्कृष्ट सुझाव भी दिए,

distinguishable_colors(20)

बेशक, आप एक अक्ष के लिए ColorOrder सेट कर सकते हैं या किसी भी तरह से उपयोग करने के लिए रंगों की एक सूची उत्पन्न कर सकते हैं। उदाहरण के लिए, 10 "अधिकतम परिकल्पना-अलग रंग" उत्पन्न करने के लिए और उसी अक्ष पर 10 भूखंडों के लिए उनका उपयोग करें ( लेकिन ColorOrder का उपयोग न करें, इस प्रकार लूप की आवश्यकता होती है ):

% Starting with X of size N-by-P-by-2, where P is number of plots
mpdc10 = distinguishable_colors(10) % 10x3 color list
hold on
for ii=1:size(X,2),
    plot(X(:,ii,1),X(:,ii,2),'.','Color',mpdc10(ii,:));
end

प्रक्रिया सरल है, ColorOrder अक्ष संपत्ति के साथ, लूप के for कोई आवश्यकता नहीं है :

% X of size N-by-P-by-2
mpdc10 = distinguishable_colors(10)
ha = axes; hold(ha,'on')
set(ha,'ColorOrder',mpdc10)    % --- set ColorOrder HERE ---
plot(X(:,:,1),X(:,:,2),'-.')   % loop NOT needed, 'Color' NOT needed. Yay!

अनुबंध

वर्तमान धुरी के लिए ColorOrder आरजीबी सरणी का उपयोग करने के लिए,

get(gca,'ColorOrder')

नई अक्षों के लिए डिफ़ॉल्ट ColorOrder प्राप्त करने के लिए,

get(0,'DefaultAxesColorOrder')

MATLAB प्रारंभ पर 10 रंगों के साथ नए वैश्विक ColorOrder को सेट करने का उदाहरण, startup.m :

set(0,'DefaultAxesColorOrder',distinguishable_colors(10))

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

data = randn(100, 5);

figure;
plot(data);

legend(cellstr(num2str((1:size(data,2))')))

या, यदि आपके पास कर्नल नामों वाला सेल है, तो इसका उपयोग करें

legend(names)

रंगों का एक सेट उत्पन्न करने के लिए आप एचएसवी जैसे कोलोर्मैप का उपयोग कर सकते हैं। उदाहरण के लिए:

cc=hsv(12);
figure; 
hold on;
for i=1:12
    plot([0 1],[0 i],'color',cc(i,:));
end

MATLAB में 13 अलग-अलग नामांकित रंगमंच हैं ( 'डॉक्टर कोलोरैप' उन सभी को सूचीबद्ध करता है)।

विभिन्न रंगों में लाइनों की साजिश के लिए एक अन्य विकल्प LineStyleOrder संपत्ति का उपयोग करना है; अधिक जानकारी के लिए MATLAB दस्तावेज़ में प्लॉटिंग के लिए लाइनों के रंग को परिभाषित करना देखें।





matlab-figure