Réponse tardive, mais deux choses à ajouter:
- Pour plus d'informations sur la modification de la
'ColorOrder'
propriété et sur la définition d'une valeur par défaut globale avec'DefaultAxesColorOrder'
, consultez l '«Annexe» au bas de cet article.
- Il existe un excellent outil sur l'échange central de fichiers MATLAB pour générer n'importe quel nombre de couleurs visuellement distinctes, si vous disposez de la boîte à outils de traitement d'image pour l'utiliser. Lisez la suite pour plus de détails.
La ColorOrder
axes
propriété permet à MATLAB de faire défiler automatiquement une liste de couleurs lors de l'utilisation hold on/all
(encore une fois, voir l'annexe ci-dessous pour savoir comment set
/ get
le ColorOrder
pour un axe spécifique ou globalement via DefaultAxesColorOrder
). Cependant, par défaut, MATLAB ne spécifie qu'une courte liste de couleurs ( seulement 7 à partir de R2013b) à parcourir, et d'un autre côté, il peut être problématique de trouver un bon ensemble de couleurs pour plus de séries de données. Pour 10 parcelles, vous ne pouvez évidemment pas vous fier à la valeur par défaut ColorOrder
.
Une excellente façon de définir N couleurs visuellement distinctes consiste à soumettre la soumission «Générer des couleurs distinctes au maximum de la perception» (GMPDC) sur MATLAB Central File Exchange . Il est mieux décrit dans les propres mots de l'auteur:
Cette fonction génère un ensemble de couleurs qui se distinguent par référence à l' espace colorimétrique "Lab" , qui correspond plus étroitement à la perception humaine des couleurs que RVB. Étant donné une grande liste initiale de couleurs possibles, il choisit de manière itérative l'entrée dans la liste qui est la plus éloignée (dans l'espace Lab) de toutes les entrées précédemment choisies.
Par exemple, lorsque 25 couleurs sont demandées:
La soumission GMPDC a été choisie sur le blog officiel de MathWorks comme Choix de la semaine en 2010 en partie en raison de la possibilité de demander un nombre arbitraire de couleurs (contrairement aux 7 couleurs par défaut de MATLAB). Ils ont même fait l'excellente suggestion de régler MATLAB ColorOrder
au démarrage sur,
distinguishable_colors(20)
Bien sûr, vous pouvez définir le ColorOrder
pour un seul axe ou simplement générer une liste de couleurs à utiliser comme vous le souhaitez. Par exemple, pour générer 10 "couleurs perceptuellement distinctes au maximum" et les utiliser pour 10 tracés sur le même axe ( mais sans utiliser ColorOrder
, ce qui nécessite une boucle ):
% 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
Le processus est simplifié, ne nécessitant aucune for
boucle, avec la ColorOrder
propriété axis :
% X de la taille N-par-P-par-2
mpdc10 = couleurs_distribuables (10)
ha = axes; tenir (ha, 'on')
set (ha, 'ColorOrder', mpdc10)% --- set ColorOrder ICI ---
plot (X (:,:, 1), X (:,:, 2), '-.')% boucle NON nécessaire, 'Couleur' NON nécessaire. Yay!
APPENDICE
Pour obtenir le ColorOrder
tableau RVB utilisé pour l'axe actuel,
get(gca,'ColorOrder')
Pour obtenir la valeur ColorOrder
par défaut des nouveaux axes,
get(0,'DefaultAxesColorOrder')
Exemple de paramétrage de nouveau global ColorOrder
avec 10 couleurs au démarrage de MATLAB, en startup.m
:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))