6

当您设置时DefaultAxesColorOrderDefaultAxesLineStyleOrderMATLAB 将首先循环使用第一种样式的所有颜色,然后再次使用第二种样式遍历所有颜色,依此类推。

请参阅此文档相关问题

我想做的是设置独立应用的颜色顺序和样式顺序。

例如,如果我设置DefaultAxesColorOrder[1 0 0; 0 1 0; 0 0 1]DefaultAxesLineStyleOrder'-|--|:'则行将是'r-', 'g-', 'b-', 'r--', 'g--', 'b--', 'r:', 'g:', 'b:'。我希望线条是'r-', 'g--', 'b:'.

4

2 回答 2

4

我看不到直接开箱即用的方法。直接的方法是为每一行手动设置颜色/样式。

这是一个更自动化的解决方案。让我们从文档中的一个示例开始:

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

在此处输入图像描述

于 2011-09-07T01:24:10.840 回答
1

Amro 的方法效果很好。请注意,您不必设置默认值来执行此操作。你可以做这样的事情

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
于 2015-08-11T21:17:00.880 回答