Plotten automatisch verschiedene farbige Linien
-
19-09-2019 - |
Frage
Ich versuche, mehrere Kerndichteschätzungen in der gleichen Grafik zu zeichnen, und ich möchte, dass sie zu allen verschiedenen Farben sein. Ich habe eine kludged Lösung einen String 'rgbcmyk'
verwenden und für jede einzelne Handlung durch sie treten, aber ich beginne Duplikate nach 7 Wiederholungen mit. Gibt es eine einfachere / effizientere Art und Weise, dies zu tun, und mit mehr Farben?
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
Lösung
Sie könnten eine colormap wie HSV verwenden, um eine Reihe von Farben zu erzeugen. Zum Beispiel:
cc=hsv(12);
figure;
hold on;
for i=1:12
plot([0 1],[0 i],'color',cc(i,:));
end
MATLAB hat 13 verschiedene Namen Farbtabellen ( 'doc colormap' listet sie alle).
Eine weitere Option für die Linien in verschiedenen Farben Plotten ist die LineStyleOrder Eigenschaft zu verwenden; finden Sie unter Definition der Farbe der Linien für Plotten in der MATLAB-Dokumentation weitere Informationen.
Andere Tipps
Eigentlich eine anständige Shortcut-Methode für die Farben Zyklus immer ist hold all;
anstelle von hold on;
zu verwenden. Jede nachfolgende plot
dreht (automatisch für Sie) durch MATLAB-Standard colormap.
Von der MATLAB-Website auf hold
:
hold all
hält die Handlung und die aktuelle Linienfarbe und Linienstil, so dass nachfolgende Plottbefehle an den Anfang der Liste die ColorOrder und LineStyleOrder Eigenschaftswerte nicht zurückgesetzt. Plottbefehle radeln weiter durch die vordefinierten Farben und Linienstile, von wo aus das letzte Grundstück in der Liste gestoppt.
Späte Antwort, aber zwei Dinge hinzufügen:
- Informationen darüber, wie die
'ColorOrder'
Eigenschaft zu ändern und wie ein globalen Standard mit'DefaultAxesColorOrder'
setzen, finden Sie im „Anhang“ am Ende dieses Beitrags. - Es ist ein großes Werkzeug auf der zentrale File Exchange MATLAB eine beliebige Anzahl von visuell unterschiedlichen Farben zu erzeugen, wenn Sie die Image Processing Toolbox zu verwenden, es haben. Lesen Sie weiter für Details.
Die ColorOrder
axes
Eigenschaft MATLAB automatisch Zyklus durch eine Liste von Farben erlaubt, wenn mit hold on/all
(wiederum siehe Anhang unten, wie der set
für eine bestimmte Achse get
/ ColorOrder
oder global über DefaultAxesColorOrder
). Jedoch standardmäßig MATLAB gibt nur eine kurze Liste von Farben ( nur 7 ab R2013b) , um durch, und auf der anderen Seite kann es problematisch sein, einen guten zu finden Satz von Farben für mehr Datenreihe. Für 10 Parzellen, können Sie natürlich nicht auf dem Standard-ColorOrder
verlassen.
Eine gute Möglichkeit, definieren N visuell unterschiedliche Farben ist mit der " Gene Maximal wahrnehmungs-Distinct Farben“(GMPDC) Vorlage auf der zentralen Datei File Exchange MATLAB. Es ist am besten in dem Autor eigenen Worte beschrieben:
Diese Funktion erzeugt eine Reihe von Farben, die durch Bezugnahme auf den „Lab“ Farbraum unterscheidbar sind, die näher Spiele menschliche Farbwahrnehmung als RGB. eine erste große Liste von möglichen Farben gegeben, wählt es iterativ den Eintrag in der Liste, die am weitesten ist (im Lab-Raum) von allen zuvor ausgewählten Einträgen.
Wenn zum Beispiel 25 Farben werden angefordert:
Die GMPDC Vorlage wurde auf MathWorks' offiziellen Blog: Pick of the Week im Jahr 2010 aufgrund der Fähigkeit, eine beliebigen Anzahl von Farben zu verlangen (im Gegensatz zu MATLAB integrierte in 7 Standardfarben) teilweise. Sie haben sie sogar den hervorragenden Vorschlag MATLAB ColorOrder
beim Start auf,
distinguishable_colors(20)
Natürlich können Sie die ColorOrder
für eine einzige Achse gesetzt oder einfach eine Liste von Farben erzeugen in irgendeiner Weise zu verwenden, die Sie mögen. Zum Beispiel erzeugen 10 „maximal wahrnehmungs verschiedene Farben“ und sie für 10 Stellplätze auf der gleichen Achse ( aber nicht ColorOrder
verwenden, wodurch eine Schleife erfordert ):
% 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
Das Verfahren wird vereinfacht, erfordert keine for
Schleife, mit der Achse ColorOrder
Eigenschaft :
% 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!
ANHANG
den ColorOrder
RGB-Array für die aktuelle Achse verwendet zu erhalten,
get(gca,'ColorOrder')
Um den Standard ColorOrder
für neue Achsen zu bekommen,
get(0,'DefaultAxesColorOrder')
Beispiel für neue globale ColorOrder
Einstellung mit 10 Farben auf MATLAB Start in startup.m
:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))
spät zur Party. Ich schaute in diese selbst und fand nur um diese Option Achsen genannt ColorOrder Sie können die Farbe, um für die Sitzung oder einfach nur für die Figur angeben und dann nur ein Array plotten und MATLAB automatisch Zyklus durch die Farben angegeben lassen.
finden Sie unter Ändern der Standard ColorOrder
Beispiel
set(0,'DefaultAxesColorOrder',jet(5))
A=rand(10,5);
plot(A);
Wenn alle Vektoren gleiche Größe haben, eine Matrix erstellen und grafisch darzustellen.
Jede Säule ist mit einer anderen Farbe aufgetragen automatisch
Dann können Sie verwenden legend
Spalten, um anzuzeigen:
data = randn(100, 5);
figure;
plot(data);
legend(cellstr(num2str((1:size(data,2))')))
Oder, wenn Sie eine Zelle mit Kernel-Namen haben, verwenden Sie
legend(names)