Pregunta

Cuando te configuras DefaultAxesColorOrder y DefaultAxesLineStyleOrder Matlab primero en bicicleta a través de todos los colores con el primer estilo, luego nuevamente a través de todos los colores con el segundo estilo y así sucesivamente.

Mira esto documentación o pregunta relacionada.

Lo que me gustaría hacer es establecer el orden de color y el orden de estilo para aplicarse de forma independiente.

Por ejemplo, si lo configuro DefaultAxesColorOrder a [1 0 0; 0 1 0; 0 0 1] y DefaultAxesLineStyleOrder a '-|--|:', las líneas serán 'r-','g-','b-','r--','g--','b--','r:','g:','b:'. Quiero que las líneas sean 'r-','g--','b:'.

¿Fue útil?

Solución

No veo una forma de hacer esto directamente de la caja. La forma directa es establecer el color/estilo manualmente para cada línea.

Aquí hay una solución más automatizada. Comencemos con un ejemplo tomado de la documentación:

%# 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);

Como explicó en su pregunta, el comportamiento predeterminado es recorrer primero los colores, luego los estilos de línea. Si desea aplicarlos de forma independiente, intente lo siguiente:

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))

Tal vez pueda envolver eso en una función para un acceso conveniente (aún tiene que pasar las manijas a los objetos gráficos de las líneas):

function applyColorLineStyleIndependently(h)
    %# ...
end

enter image description here

Otros consejos

El enfoque de Amro funciona bien. Solo como nota, no tiene que establecer los valores predeterminados para hacer esto. Puedes hacer algo como esto

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)

Editar: la función MyColors () está hecha en casa. Defino

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

(Los nombres de color son de esto http://www.rapidtables.com/web/color/rgb_color.htm). Luego los escala a [0,1] a través de

c = fieldnames(colors);
for i = 1:numel(c)
    colors.(c{i}) = colors.(c{i})/255;
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top