MATLAB: установить цвет и порядок линий, которые будут применяться параллельно - PullRequest
6 голосов
/ 07 сентября 2011

Когда вы устанавливаете DefaultAxesColorOrder и DefaultAxesLineStyleOrder, MATLAB сначала будет циклически проходить все цвета в первом стиле, затем снова все цвета во втором стиле и так далее.

См. Эту документацию или связанный вопрос .

Я хотел бы установить порядок цветов и порядок стилей, которые будут применяться независимо.

Например, если я установлю DefaultAxesColorOrder на [1 0 0; 0 1 0; 0 0 1] и DefaultAxesLineStyleOrder на '-|--|:', строки будут 'r-', 'g-', 'b-', 'r--', 'g--' 'b--' 'r:' 'g:' 'b:'.Я хочу, чтобы строки были 'r-', 'g--', 'b:'.

Ответы [ 2 ]

4 голосов
/ 07 сентября 2011

Я не вижу способа сделать это прямо из коробки. Простой способ - установить цвет / стиль вручную для каждой строки.

Вот более автоматизированное решение. Начнем с примера, взятого из документации:

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

Как вы объяснили в своем вопросе, поведение по умолчанию - сначала циклически проходить цвета, а затем стили линий. Если вы хотите применить их самостоятельно, попробуйте следующее:

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

Вы можете обернуть это в функцию для удобного доступа (вам все еще нужно передать маркеры в линии графических объектов):

function applyColorLineStyleIndependently(h)
    %# ...
end

enter image description here

0 голосов
/ 12 августа 2015

Подход Амро работает хорошо.Как примечание, вам не нужно устанавливать значения по умолчанию, чтобы сделать это.Вы можете сделать что-то вроде этого

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)

Редактировать: функция mycolors () сделана дома.Я определяю

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

(названия цветов от этого http://www.rapidtables.com/web/color/RGB_Color.htm). Затем я масштабирую их до [0,1] через

c = fieldnames(colors);
for i = 1:numel(c)
    colors.(c{i}) = colors.(c{i})/255;
end
...