Risposta tardiva, ma due cose da aggiungere:
- Per informazioni su come modificare la
'ColorOrder'
proprietà e come impostare un valore predefinito globale con 'DefaultAxesColorOrder'
, vedere l '"Appendice" in fondo a questo post.
- C'è un ottimo strumento in MATLAB Central File Exchange per generare un numero qualsiasi di colori visivamente distinti, se hai il Toolbox di elaborazione delle immagini per usarlo. Continua a leggere per i dettagli.
La ColorOrder
axes
proprietà permette di MATLAB per passare automaticamente attraverso una lista di colori quando si utilizzano hold on/all
(ancora una volta, si veda l'Appendice sotto per sapere come set
/ get
la ColorOrder
per un asse specifico o globalmente via DefaultAxesColorOrder
). Tuttavia, per impostazione predefinita MATLAB specifica solo un breve elenco di colori ( solo 7 a partire da R2013b) da scorrere, e d'altra parte può essere problematico trovare un buon set di colori per più serie di dati. Per 10 lotti, ovviamente non puoi fare affidamento sul valore predefinito ColorOrder
.
Un ottimo modo per definire N colori visivamente distinti è con l' invio "Generate Maximally Perceptually-Distinct Colors" (GMPDC) su MATLAB Central File Exchange . È meglio descritto con le parole dell'autore:
Questa funzione genera un insieme di colori che sono distinguibili in riferimento allo spazio colore "Lab" , che corrisponde più da vicino alla percezione del colore umano rispetto a RGB. Dato un ampio elenco iniziale di possibili colori, sceglie iterativamente la voce nell'elenco più lontana (nello spazio Lab) da tutte le voci scelte in precedenza.
Ad esempio, quando sono richiesti 25 colori:
La presentazione GMPDC è stata scelta sul blog ufficiale di MathWorks come Scelta della settimana nel 2010 in parte a causa della possibilità di richiedere un numero arbitrario di colori (in contrasto con i 7 colori predefiniti di MATLAB). Hanno anche dato l'eccellente suggerimento di impostare MATLAB ColorOrder
all'avvio su,
distinguishable_colors(20)
Naturalmente, puoi impostare il ColorOrder
per un singolo asse o semplicemente generare un elenco di colori da utilizzare nel modo che preferisci. Ad esempio, per generare 10 "colori percettivamente distinti al massimo" e usarli per 10 grafici sullo stesso asse ( ma non utilizzando ColorOrder
, richiedendo quindi un ciclo ):
% 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
Il processo è semplificato, non richiede for
loop, con la ColorOrder
proprietà axis :
% X di dimensione N per P per 2
mpdc10 = distinguishable_colors (10)
ha = assi; hold (ha, 'on')
set (ha, 'ColorOrder', mpdc10)% --- set ColorOrder QUI ---
plot (X (:,:, 1), X (:,:, 2), '-.')% loop NON necessario, 'Color' NON necessario. Sìì!
APPENDICE
Per ottenere l' ColorOrder
array RGB utilizzato per l'asse corrente,
get(gca,'ColorOrder')
Per ottenere l'impostazione predefinita ColorOrder
per i nuovi assi,
get(0,'DefaultAxesColorOrder')
Esempio di impostazione di un nuovo globale ColorOrder
con 10 colori all'avvio di MATLAB, in startup.m
:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))