Question

Lorsque vous définissez MATLAB DefaultAxesColorOrder et DefaultAxesLineStyleOrder va d'abord faire défiler toutes les couleurs avec le premier style, puis de nouveau par toutes les couleurs avec le second style et ainsi de suite.

Voir cette documentation ou related question .

Ce que je voudrais faire est de l'ordre de jeu de couleurs et de l'ordre de style à appliquer indépendamment.

Par exemple, si je mets à DefaultAxesColorOrder [1 0 0; 0 1 0; 0 0 1] et DefaultAxesLineStyleOrder à '-|--|:', les lignes seront 'r-', 'g-', 'b-', 'r--', 'g--', 'b--', 'r:', 'g:', 'b:'. Je veux lignes à 'r-', 'g--', 'b:'.

Était-ce utile?

La solution

Je ne vois pas une façon de le faire directement hors de la boîte. La façon simple est de définir la couleur / le style manuellement pour chaque ligne.

Voici une solution plus automatisée. Commençons par un exemple tiré de la documentation:

%# defaults are set sometime before
set(0, 'DefaultAxesColorOrder',[1 0 0;0 1 0;0 0 1], ...
      'DefaultAxesLineStyleOrder','-|--|:')

%# do plotting as usual
t = 0:pi/20:2*pi;
a = zeros(length(t),9);
for i = 1:9
    a(:,i) = sin(t-i/5)';
end
h = plot(t,a);

Comme vous l'avez expliqué dans votre question, le comportement par défaut est de faire défiler les couleurs d'abord, puis les styles de ligne. Si vous voulez les appliquer indépendamment, essayez ce qui suit:

c = num2cell(get(0,'DefaultAxesColorOrder'),2);
l = cellstr(get(0,'DefaultAxesLineStyleOrder'));
set(h, {'Color'}, c(rem((1:numel(h))-1,numel(c))+1), ...
    {'LineStyle'}, l(rem((1:numel(h))-1,numel(l))+1))

Vous pouvez peut-être conclure que dans une fonction pour un accès pratique (il vous reste à passer les poignées aux lignes d'objets graphiques):

function applyColorLineStyleIndependently(h)
    %# ...
end

entrer image description ici

Autres conseils

L'approche de Amro fonctionne bien. Tout comme une note, vous ne devez pas définir les paramètres par défaut de le faire. Vous pouvez faire quelque chose comme ceci

col = mycolors(); % defines RGB colors scaled to [0,1]

i = 1;
c(:,i) = col.royal_blue; i = i+1;
c(:,i) = col.crimson; i = i+1;
c(:,i) = col.medium_sea_green; i = i+1;
c(:,i) = col.coral; i = i+1;
c(:,i) = col.dark_magenta; i = i+1;

colord = num2cell(c',2);
lineord = {'-' '--' '-.'}'; 

set(h,{'Color'}, colord(rem((1:numel(h))-1,numel(colord))+1), ...
      {'LineStyle'}, lineord(rem((1:numel(h))-1,numel(lineord))+1))
set(h,'LineWidth',2)

Edit: la fonction mycolors () est fait maison. Je définis

colors.maroon = [128,0,0];
colors.dark_red = [139,0,0];
colors.brown = [165,42,42];
...

(les noms de couleur sont de cette http://www.rapidtables.com/web /color/RGB_Color.htm ). Ensuite, je les ai à l'échelle [0,1] via

c = fieldnames(colors);
for i = 1:numel(c)
    colors.(c{i}) = colors.(c{i})/255;
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top