J'essaie de tracer plusieurs estimations de densité de noyau sur le même graphique, et je veux qu'elles soient toutes de couleurs différentes. J'ai une solution kludged utilisant une chaîne 'rgbcmyk'
et la parcourant pour chaque tracé séparé, mais je commence à avoir des doublons après 7 itérations. Existe-t-il un moyen plus simple / plus efficace de le faire et avec plus d'options de couleur?
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
la source
la source
hold on
est fonctionnellement équivalent àhold all
. Cependant, la question de savoir comment obtenir plus que les 7 couleurs par défaut demeure. Une carte de couleurs par défaut peut être une solution telle que décrite par Azim ou une fonction pour générer des couleurs réglées pour une discrimination visuelle facile peut être utilisée, comme ci-dessous .hold all
j'obtiens des tracés de différentes couleurs (même si je dois dire qu'ils ont l'air assez terne), alors que lorsque j'utilisehold on
, tous mes tracés deviennent bleus. Je me demande donc ce qu'est l'équivalence fonctionnelle.hold on
donne des tracés de couleurs différents. Vous utilisez une version plus ancienne. Dans la documentation actuelle , "hold all
est identique àhold on
. Remarque: Cette syntaxe sera supprimée dans une prochaine version. Utilisez-la à lahold on
place." Voir également les notes de version .Réponses:
Vous pouvez utiliser une palette de couleurs telle que HSV pour générer un ensemble de couleurs. Par exemple:
MATLAB a 13 couleurs différentes nommées ( 'doc colormap' répertorie toutes).
Une autre option pour tracer des lignes de différentes couleurs consiste à utiliser la propriété LineStyleOrder ; voir Définition de la couleur des lignes pour le tracé dans la documentation MATLAB pour plus d'informations.
la source
hold all
solution de @Mark Elliot en raison de sa polyvalence de pouvoir choisir différentes cartes de couleurs.En fait, une méthode de raccourci décente pour obtenir les couleurs à cycle est d'utiliser
hold all;
à la place dehold on;
. Chaque successiveplot
tournera (automatiquement pour vous) à travers la palette de couleurs par défaut de MATLAB.Depuis le site MATLAB sur
hold
:la source
Réponse tardive, mais deux choses à ajouter:
'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.La
ColorOrder
axes
propriété permet à MATLAB de faire défiler automatiquement une liste de couleurs lors de l'utilisationhold on/all
(encore une fois, voir l'annexe ci-dessous pour savoir commentset
/get
leColorOrder
pour un axe spécifique ou globalement viaDefaultAxesColorOrder
). 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éfautColorOrder
.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:
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,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 utiliserColorOrder
, ce qui nécessite une boucle ):Le processus est simplifié, ne nécessitant aucune
for
boucle, avec laColorOrder
propriété axis :APPENDICE
Pour obtenir le
ColorOrder
tableau RVB utilisé pour l'axe actuel,Pour obtenir la valeur
ColorOrder
par défaut des nouveaux axes,Exemple de paramétrage de nouveau global
ColorOrder
avec 10 couleurs au démarrage de MATLAB, enstartup.m
:la source
En retard à la fête. J'étais en train de regarder cela moi-même et je viens de trouver à propos de cette option d'axes appelée ColorOrder.Vous pouvez spécifier l'ordre des couleurs pour la session ou simplement pour la figure, puis simplement tracer un tableau et laisser MATLAB parcourir automatiquement les couleurs spécifiées.
voir Modification de la couleur par défaut
exemple
la source
set(gca,'ColorOrder',jet(5));
Si tous les vecteurs ont la même taille, créez une matrice et tracez-la. Chaque colonne est tracée automatiquement avec une couleur différente.Vous pouvez ensuite utiliser
legend
pour indiquer les colonnes:Ou, si vous avez une cellule avec des noms de noyaux, utilisez
la source