2011-09-06 15 views
6

当您设置DefaultAxesColorOrderDefaultAxesLineStyleOrder MATLAB将首先循环显示所有具有第一种样式的颜色,然后再循环显示具有第二种样式的所有颜色,依此类推。MATLAB:设置要并行应用的线条颜色和样式顺序

看到这个documentationrelated question

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

例如,如果我设置DefaultAxesColorOrder[1 0 0; 0 1 0; 0 0 1]DefaultAxesLineStyleOrder'-|--|:',该线将'r-''g-''b-''r--''g--''b--''r:''g:''b:'。我想要的行是'r-''g--''b:'

回答

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 

enter image description here

+0

将它们缩放到[0,1]非常感谢!这很棒!我从来没有在'set'中使用单元格数组。 – yuk

0

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)。然后我通过

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

谢谢。什么是mycolors功能?我没有在MATLAB或FileExchange中找到它。它是你自己的代码吗? – yuk

相关问题