Późna odpowiedź, ale dwie rzeczy do dodania:
- Aby uzyskać informacje o tym, jak zmienić
'ColorOrder'
właściwość i ustawić globalną wartość domyślną za pomocą 'DefaultAxesColorOrder'
, zobacz „Dodatek” na dole tego posta.
- W centralnej wymianie plików MATLAB znajduje się świetne narzędzie do generowania dowolnej liczby wizualnie różnych kolorów, jeśli masz zestaw narzędzi do przetwarzania obrazu, który go używa. Przeczytaj szczegóły.
Ta ColorOrder
axes
właściwość umożliwia MATLAB-owi automatyczne przełączanie listy kolorów podczas używania hold on/all
(ponownie, zobacz Dodatek poniżej, aby dowiedzieć się, jak set
/ get
a ColorOrder
dla określonej osi lub globalnie przez DefaultAxesColorOrder
). Jednak domyślnie MATLAB określa tylko krótką listę kolorów ( tylko 7 od R2013b) do przełączenia , az drugiej strony znalezienie dobrego zestawu kolorów dla większej liczby serii danych może być problematyczne. W przypadku 10 działek oczywiście nie można polegać na wartości domyślnej ColorOrder
.
Świetnym sposobem na zdefiniowanie N wizualnie odrębnych kolorów jest przesłanie „Generuj maksymalnie percepcyjnie odróżniające się kolory” (GMPDC) w centralnej wymianie plików MATLAB . Najlepiej można to opisać własnymi słowami autora:
Ta funkcja generuje zestaw kolorów, które można rozróżnić na podstawie przestrzeni kolorów „Lab” , która jest bardziej zgodna z postrzeganiem kolorów przez człowieka niż RGB. Biorąc pod uwagę początkową dużą listę możliwych kolorów, iteracyjnie wybiera wpis na liście, który jest najdalszy (w przestrzeni laboratorium) ze wszystkich wcześniej wybranych wpisów.
Na przykład, gdy wymagane jest 25 kolorów:
Zgłoszenie GMPDC zostało wybrane na oficjalnym blogu MathWorks jako Pick of the Week w 2010, po części ze względu na możliwość zażądania dowolnej liczby kolorów (w przeciwieństwie do MATLAB-ów zbudowanych w 7 domyślnych kolorach). Zrobili nawet doskonałą sugestię, aby ustawić MATLAB ColorOrder
na starcie na,
distinguishable_colors(20)
Oczywiście możesz ustawić ColorOrder
dla pojedynczej osi lub po prostu wygenerować listę kolorów do użycia w dowolny sposób. Na przykład, aby wygenerować 10 „maksymalnie percepcyjnie różnych kolorów” i użyć ich na 10 wykresach na tej samej osi ( ale bez użycia ColorOrder
, co wymaga pętli ):
% 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
Proces jest uproszczony, nie wymaga for
pętli, z ColorOrder
właściwością axis :
% X rozmiaru N na P na 2
mpdc10 = odróżnialne_ kolory (10)
ha = osie; przytrzymaj (ha, 'włączony')
set (ha, 'ColorOrder', mpdc10)% --- ustaw ColorOrder TUTAJ ---
plot (X (:,:, 1), X (:,:, 2), '-.')% pętla NIE jest potrzebna, 'Kolor' NIE jest potrzebna. Yay!
DODATEK
Aby uzyskać ColorOrder
tablicę RGB używaną dla bieżącej osi,
get(gca,'ColorOrder')
Aby uzyskać ustawienia domyślne ColorOrder
dla nowych osi,
get(0,'DefaultAxesColorOrder')
Przykład ustawienia nowego globalnego ColorOrder
z 10 kolorami na starcie MATLAB, w startup.m
:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))