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
War es hilfreich?

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:

25 "maximal wahrnehmungs verschiedene Farben"

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top