110 votes

Tracer automatiquement des lignes de couleur différentes

Je suis en train de tracer plusieurs estimations de la densité du noyau sur le même graphe, et je veux qu’ils tous être de différentes couleurs. J’ai une solution kludged à l’aide d’une chaîne `` et stepping à travers elle pour chaque parcelle distincte, mais j’ai commencer à avoir des doublons après 7 itérations. Y a-t-il un moyen plus facile et plus efficace de faire cela et avec plus d’options de couleur ?

130voto

Azim Points 4541

Vous pouvez utiliser une palette des couleurs telles que HSV pour générer un jeu de couleurs. Par exemple :

MATLAB a 13 différents nommé carte des couleurs (« doc colormap » répertorie tous).

Une autre option pour traçage de lignes de couleurs différentes est d’utiliser la propriété LineStyleOrder ; dans la documentation de MATLAB pour plus d’informations, consultez définition de la couleur des lignes pour la table à tracer .

106voto

Mark Elliot Points 31871

En fait, un bon raccourci méthode pour obtenir les couleurs de cycle est d'utiliser hold all; à la place de hold on;. Chaque successives plot va faire tourner (automatiquement) par le biais de MATLAB palette par défaut.

À partir de l'MATLAB site sur hold:

hold all détient le la parcelle et de la ligne courante de la couleur et le style de ligne, de sorte que par la suite, le traçage des commandes ne réinitialisez pas le ColorOrder et LineStyleOrder valeurs de propriété dans le début de la liste. Traçage des commandes continuent à vélo à travers les couleurs prédéfinies et des styles de ligne de où la dernière parcelle arrêté dans la liste.

36voto

chappjc Points 16352

Cette très tard, mais peut-être utile de répondre à mailles très bien avec l' ColorOrder de la propriété.

L' ColorOrder axes de la propriété permet de MATLAB pour parcourir automatiquement une liste de couleurs lors de l'utilisation d' hold all (Voir Annexe ci-dessous pour savoir comment set/get le ColorOrder pour un axe spécifique ou à l'échelle mondiale via DefaultAxesColorOrder). Toutefois, par défaut MATLAB spécifie seulement une courte liste de couleurs (seulement 7 comme de R2013b) pour faire défiler, et d'autre part, il peut être difficile de trouver un bon jeu de couleurs pour plus de la série de données. Pour les 10 parcelles, évidemment on ne peut pas compter sur la valeur par défaut ColorOrder.

Une excellente façon de définir N visuellement couleurs distinctes est avec la "Générer le Maximum de Perception des Couleurs Distinctes" (GMPDC) présentation sur le MATLAB Central de Fichier d'Échange de Fichiers. Il est mieux décrit dans les mots de l'auteur:

Cette fonction génère un ensemble de couleurs qui se distinguent par la référence au "Laboratoire" espace de couleur, qui correspond de plus près à perception humaine de la couleur de RVB. Reçu une grande liste 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 de Laboratoire) de tous les précédemment choisi entrées.

Par exemple, lorsque le 25 couleurs sont demandés:

25 "maximally perceptually-distinct colors"

Le GMPDC soumission a été choisi sur MathWorks' blog officiel que les choix de la Semaine en 2010, en partie en raison de la possibilité de demander un nombre arbitraire de couleurs (contrairement à MATLAB construit en 7 couleurs par défaut). Ils ont même fait l'excellente suggestion pour définir MATLAB ColorOrder sur le démarrage,

distinguishable_colors(20)

Bien sûr, vous pouvez définir l' ColorOrder pour un seul axe ou tout simplement de générer une liste de couleurs à utiliser de quelque façon que vous aimez. Par exemple, pour générer 10 "au maximum de perception des couleurs distinctes" et de les utiliser pour les 10 parcelles sur le même axe (mais pas à l'aide de ColorOrder):

% 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 pas d' for boucle, avec l' ColorOrder de l'axe de la propriété:

% X of size N-by-P-by-2
mpdc10 = distinguishable_colors(10)
ha = axes; hold(ha,'on')
set(ha,'ColorOrder',mpdc10)    % <--- HERE
plot(X(:,:,1),X(:,:,2),'-.')   % loop NOT needed, 'Color' NOT needed

ANNEXE

Pour obtenir l' ColorOrder tableau RVB utilisé pour l'axe actuel,

get(gca,'ColorOrder')

Pour obtenir la valeur par défaut ColorOrder pour les nouveaux axes,

get(0,'DefaultAxesColorOrder')

Exemple de paramétrage global d' ColorOrder avec 10 couleurs sur MATLAB démarrer, en startup.m:

set(0,'DefaultAxesColorOrder',distinguishable_colors(10))

12voto

xquared Points 61

Vers la fin de la partie. Je cherchais dans ce moi et viens de trouver sur cette option axes appelée ColorOrder, vous pouvez spécifier l’ordre des couleurs pour la session ou tout simplement pour la figure, puis juste tracer un tableau et laisser MATLAB automatiquement faire défiler les couleurs spécifiées.

Voir modification de la ColorOrder par défaut

exemple de

4voto

Serg Points 2387

Si tous les vecteurs ont des dimensions égales, créer une matrice et il intrigue. Chaque colonne est automatiquement tracée avec une couleur différente, alors vous pouvez utiliser `` pour indiquer les colonnes :

Ou, si vous avez une cellule dont les noms noyaux, utiliser

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X