Próbuję narysować kilka oszacowań gęstości jądra na tym samym wykresie i chcę, aby wszystkie miały różne kolory. Mam rozwiązanie wykorzystujące ciąg znaków 'rgbcmyk'
i przechodzące przez niego dla każdego oddzielnego wykresu, ale zaczynam mieć duplikaty po 7 iteracjach. Czy jest na to łatwiejszy / wydajniejszy sposób i więcej opcji kolorów?
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
matlab
plot
matlab-figure
Doresoom
źródło
źródło
hold on
jest funkcjonalnie równoważne zhold all
. Pozostaje jednak pytanie, jak uzyskać więcej niż 7 domyślnych kolorów. Domyślna mapa kolorów może być rozwiązaniem opisanym przez Azima lub można zastosować funkcję generowania kolorów dostrojonych w celu łatwej dyskryminacji wizualnej, jak poniżej .hold all
, otrzymuję wykresy w różnych kolorach (chociaż muszę powiedzieć, że wyglądają dość nudno), podczas gdy kiedy używamhold on
, wszystkie moje wykresy stają się niebieskie. Zastanawiam się więc, czym jest równoważność funkcjonalna.hold on
daje różne wykresy kolorów. Używasz i starszej wersji. W bieżącej dokumentacji „hold all
jest taki sam jakhold on
. Uwaga: ta składnia zostanie usunięta w przyszłej wersji.hold on
Zamiast tego użyj ”. Zobacz także informacje o wersji .Odpowiedzi:
Możesz użyć mapy kolorów, takiej jak HSV, do wygenerowania zestawu kolorów. Na przykład:
MATLAB ma 13 różnych nazwanych map kolorów ( „mapa kolorów doc” wymienia je wszystkie).
Inną opcją kreślenia linii w różnych kolorach jest użycie właściwości LineStyleOrder ; zobacz Definiowanie koloru linii do kreślenia w dokumentacji MATLAB, aby uzyskać więcej informacji.
źródło
hold all
rozwiązania @Mark Elliot ze względu na jego wszechstronność polegającą na możliwości wyboru różnych map kolorów.Właściwie przyzwoitą metodą skrótu do przełączania kolorów jest użycie
hold all;
zamiasthold on;
. Każdy kolejnyplot
będzie się obracał (automatycznie dla ciebie) przez domyślną mapę kolorów MATLAB.Ze strony MATLAB na
hold
:źródło
Późna odpowiedź, ale dwie rzeczy do dodania:
'ColorOrder'
właściwość i ustawić globalną wartość domyślną za pomocą'DefaultAxesColorOrder'
, zobacz „Dodatek” na dole tego posta.Ta
ColorOrder
axes
właściwość umożliwia MATLAB-owi automatyczne przełączanie listy kolorów podczas używaniahold on/all
(ponownie, zobacz Dodatek poniżej, aby dowiedzieć się, jakset
/get
aColorOrder
dla określonej osi lub globalnie przezDefaultAxesColorOrder
). 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ślnejColorOrder
.Ś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:
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,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życiaColorOrder
, co wymaga pętli ):Proces jest uproszczony, nie wymaga
for
pętli, zColorOrder
właściwością axis :DODATEK
Aby uzyskać
ColorOrder
tablicę RGB używaną dla bieżącej osi,Aby uzyskać ustawienia domyślne
ColorOrder
dla nowych osi,Przykład ustawienia nowego globalnego
ColorOrder
z 10 kolorami na starcie MATLAB, wstartup.m
:źródło
Spóźniony na przyjęcie. Sam się temu przyglądałem i właśnie znalazłem tę opcję osi o nazwie ColorOrder, możesz określić kolejność kolorów dla sesji lub tylko dla figury, a następnie po prostu wykreśl tablicę i pozwól MATLABowi automatycznie przełączać się przez określone kolory.
zobacz Zmiana domyślnego zamówienia kolorów
przykład
źródło
set(gca,'ColorOrder',jet(5));
Jeśli wszystkie wektory mają równe rozmiary, utwórz macierz i wykreśl ją. Każda kolumna jest automatycznie wykreślana innym kolorem. Następnie możesz użyć
legend
do wskazania kolumn:Lub, jeśli masz komórkę z nazwami jądra, użyj
źródło