Ich versuche, mehrere Kernel-Dichteschätzungen in demselben Diagramm darzustellen, und ich möchte, dass sie alle unterschiedliche Farben haben. Ich habe eine kludged Lösung, die einen String verwendet 'rgbcmyk'
und für jeden einzelnen Plot durchläuft, aber nach 7 Iterationen habe ich Duplikate. Gibt es eine einfachere / effizientere Möglichkeit, dies mit mehr Farboptionen zu tun?
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
quelle
quelle
hold on
ist funktional äquivalent zuhold all
. Es bleibt jedoch die Frage, wie mehr als die 7 Standardfarben erhalten werden können. Eine Standardfarbkarte kann eine von Azim beschriebene Lösung sein oder eine Funktion zum Erzeugen von Farben, die für eine einfache visuelle Unterscheidung abgestimmt sind, kann wie unten verwendet werden .hold all
bekomme ich Diagramme in verschiedenen Farben (obwohl ich sagen muss, dass sie ziemlich langweilig aussehen), während bei der Verwendunghold on
alle meine Diagramme blau werden. Ich frage mich also, was funktionale Äquivalenz ist.hold on
verschiedene Farbdiagramme angezeigt . Sie verwenden eine ältere Version. In den aktuellen Dokumenten ist "hold all
dasselbe wiehold on
. Hinweis: Diese Syntax wird in einer zukünftigen Version entfernt. Verwenden Siehold on
stattdessen." Siehe auch die Versionshinweise .Antworten:
Sie können eine Farbkarte wie HSV verwenden, um eine Reihe von Farben zu generieren. Beispielsweise:
MATLAB hat 13 verschiedene benannte Farbkarten ( 'doc colormap' listet sie alle auf).
Eine weitere Option zum Zeichnen von Linien in verschiedenen Farben ist die Verwendung der LineStyleOrder- Eigenschaft. Weitere Informationen finden Sie unter Definieren der Farbe von Linien zum Plotten in der MATLAB-Dokumentation.
quelle
hold all
Lösung von @Mark Elliot zu akzeptieren, da es vielseitig ist, verschiedene Farbkarten auswählen zu können.Tatsächlich ist eine anständige Abkürzungsmethode, um die Farben zum Zyklus zu bringen, die Verwendung
hold all;
von anstelle vonhold on;
. Jede Folgeplot
wird (automatisch für Sie) durch die Standard-Farbkarte von MATLAB gedreht.Von der MATLAB-Website auf
hold
:quelle
Späte Antwort, aber zwei Dinge hinzuzufügen:
'ColorOrder'
Eigenschaft und zum Festlegen eines globalen Standards'DefaultAxesColorOrder'
finden Sie im "Anhang" am Ende dieses Beitrags.Die
ColorOrder
axes
Eigenschaft ermöglicht MATLAB automatisch Zyklus durch eine Liste von Farben bei der Verwendung vonhold on/all
(wieder, siehe Anhang unten , wie manset
/get
dieColorOrder
für eine bestimmte Achse oder global überDefaultAxesColorOrder
). Standardmäßig gibt MATLAB jedoch nur eine kurze Liste von Farben an ( nur 7 ab R2013b) , die durchlaufen werden sollen. Andererseits kann es problematisch sein, einen guten Satz von Farben für mehr Datenreihen zu finden. Bei 10 Plots können Sie sich offensichtlich nicht auf die Standardeinstellung verlassenColorOrder
.Eine gute Möglichkeit , N visuell unterschiedliche Farben zu definieren, ist die GMPDC-Übermittlung "Generate Maximally Perceptually Distinct Colors" im MATLAB Central File File Exchange . Es wird am besten mit den eigenen Worten des Autors beschrieben:
Zum Beispiel, wenn 25 Farben angefordert werden:
Die GMPDC-Einreichung wurde im offiziellen Blog von MathWorks 2010 als Auswahl der Woche ausgewählt, unter anderem aufgrund der Möglichkeit, eine beliebige Anzahl von Farben anzufordern (im Gegensatz zu MATLABs in 7 Standardfarben). Sie machten sogar den ausgezeichneten Vorschlag, MATLABs beim
ColorOrder
Start auf zu setzen,Natürlich können Sie die
ColorOrder
für eine einzelne Achse festlegen oder einfach eine Liste von Farben erstellen, die Sie nach Belieben verwenden können. Zum Beispiel, um 10 "maximal wahrnehmungsmäßig unterschiedliche Farben" zu erzeugen und sie für 10 Diagramme auf derselben Achse zu verwenden ( aber nicht zu verwendenColorOrder
, wodurch eine Schleife erforderlich ist ):Der Prozess wird mit der Eigenschaft axis vereinfacht und erfordert keine
for
SchleifeColorOrder
:BLINDDARM
Um das
ColorOrder
für die aktuelle Achse verwendete RGB-Array abzurufen,Um die Standardeinstellung
ColorOrder
für neue Achsen zu erhalten,Beispiel für das Festlegen eines neuen globalen Bereichs
ColorOrder
mit 10 Farben beim Start von MATLAB instartup.m
:quelle
Spät zur Party. Ich habe mich selbst damit befasst und habe gerade über diese Achsenoption namens ColorOrder herausgefunden, dass Sie die Farbreihenfolge für die Sitzung oder nur für die Figur angeben und dann einfach ein Array zeichnen und MATLAB automatisch durch die angegebenen Farben blättern lassen können.
Siehe Ändern des Standard-ColorOrders
Beispiel
quelle
set(gca,'ColorOrder',jet(5));
Wenn alle Vektoren gleich groß sind, erstellen Sie eine Matrix und zeichnen Sie sie. Jede Spalte wird automatisch mit einer anderen Farbe gezeichnet. Anschließend können Sie
legend
Spalten angeben:Oder verwenden Sie, wenn Sie eine Zelle mit Kernelnamen haben
quelle