سؤال

أنا أحاول أن مؤامرة عدة نواة الكثافة التقديرات على نفس الرسم البياني ، أريد لها أن تكون جميع ألوان مختلفة.لدي kludged الحل باستخدام سلسلة '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
هل كانت مفيدة؟

المحلول

هل يمكن استخدام colormap مثل هامبورغ إلى توليد مجموعة من الألوان.على سبيل المثال:

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

MATLAB 13 المختلفة اسمه خرائط الألوان (دوك colormap' يسرد كل منهم).

خيار آخر بتهمة التآمر خطوط بألوان مختلفة هو استخدام LineStyleOrder الممتلكات ؛ انظر تحديد لون الخطوط بتهمة التآمر في MATLAB الوثائق للحصول على مزيد من المعلومات.

نصائح أخرى

في الواقع ، لائق اختصار طريقة الحصول على الألوان إلى دورة استخدام hold all; في مكان hold on;.كل المتعاقبة plot تدوير (تلقائيا) من خلال MATLAB الافتراضي colormap.

من MATLAB الموقع على hold:

hold all يحمل المؤامرة الحالية لون الخط و نمط الخط بحيث اللاحقة التآمر الأوامر لا إعادة ColorOrder و LineStyleOrder قيم العقارات إلى بداية القائمة.بالتآمر الأوامر مواصلة ركوب الدراجات من خلال ألوان محددة مسبقا و linestyles من حيث المؤامرة الأخيرة توقفت في القائمة.

تأخرت الإجابة, ولكن اثنين من إضافة أشياء:

  • للحصول على معلومات حول كيفية تغيير 'ColorOrder' الملكية و كيفية تعيين عالمي الافتراضي مع 'DefaultAxesColorOrder', راجع "الملحق" في الجزء السفلي من هذا المنصب.
  • هناك أداة عظيمة على MATLAB وسط تبادل الملفات إلى إنشاء أي عدد من بصريا ألوان مختلفة إذا كان لديك صورة تجهيز الأدوات لاستخدامها.قراءة على لمزيد من التفاصيل.

على ColorOrder axes الملكية يسمح MATLAB تلقائيا دورة من خلال قائمة من الألوان عند استخدام hold on/all (مرة أخرى ، انظر الملحق أدناه للتعرف على كيفية set/get على ColorOrder معين محور أو على الصعيد العالمي عبر DefaultAxesColorOrder).ولكن بشكل افتراضي MATLAB فقط تحديد قائمة قصيرة من الألوان (فقط 7 كما من R2013b) للتنقل, و من ناحية أخرى فإنه يمكن أن تكون هناك مشكلة في العثور على مجموعة جيدة من الألوان لمزيد من سلسلة البيانات.10 قطع من الواضح أنك لا يمكن الاعتماد على الافتراضي ColorOrder.

طريقة رائعة تعريف N بصريا متميزة الألوان مع "إنشاء الحد الأقصى إدراكيا-ألوان مختلفة" (GMPDC) التقديم على MATLAB ملف مركزي تبادل الملفات.هذا هو أفضل وصف في البلاغ الكلمات الخاصة:

هذه الوظيفة يولد مجموعة من الألوان التي يمكن تمييزها من خلال الإشارة إلى "مختبر" لون الفضاء, الذي أكثر تطابقا مع الإنسان إدراك اللون من RGB.نظرا أولية قائمة كبيرة من الألوان الممكنة ، تكراري يختار الدخول في القائمة التي هي أبعد (في مختبر الفضاء) من كل ما سبق-اختيار الإدخالات.

على سبيل المثال ، عند 25 الألوان المطلوبة:

25 "maximally perceptually-distinct colors"

على GMPDC تقديم اختير على MathWorks' بلوق الرسمية كما اختيار الأسبوع في عام 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

عملية مبسطة ، لا تتطلب for حلقة ، ColorOrder محور الملكية:

% X of size N-by-P-by-2
mpdc10 = distinguishable_colors(10)
ha = axes; hold(ha,'on')
set(ha,'ColorOrder',mpdc10)    % --- مجموعة ColorOrder هنا ---
plot(X(:,:,1),X(:,:,2),'-.')   % حلقة لا حاجة, 'Color' لا حاجة.ياي!

التذييل

للحصول على ColorOrder RGB مجموعة تستخدم الحالي المحور ،

get(gca,'ColorOrder')

للحصول على الافتراضي ColorOrder جديدة محاور ،

get(0,'DefaultAxesColorOrder')

مثال الإعداد العالمي الجديد ColorOrder مع 10 الألوان على MATLAB تبدأ ، startup.m:

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

في وقت متأخر إلى الحزب.كنت أنظر إلى نفسي و وجدت فقط حول هذه المحاور خيار يسمى ColorOrder يمكنك تحديد لون أجل الدورة أو الرقم ثم مجرد مؤامرة مجموعة والسماح MATLAB تلقائيا دورة من خلال الألوان المحددة.

انظر تغيير الافتراضي ColorOrder

على سبيل المثال

set(0,'DefaultAxesColorOrder',jet(5))
A=rand(10,5);
plot(A);

إذا كان كل ناقلات متساوية الحجم ، إنشاء مصفوفة والحبكة.كل عمود هو تآمر مع لون مختلف تلقائيا ثم يمكنك استخدام legend تشير الأعمدة:

data = randn(100, 5);

figure;
plot(data);

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

أو إذا كان لديك الخليوي مع حبات الأسماء استخدام

legend(names)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top