设置DefaultAxesColorOrder
和DefaultAxesLineStyleOrder
时,MATLAB将首先使用第一种样式循环显示所有颜色,然后再使用第二种样式循环显示所有颜色,依此类推。
请参阅此documentation或related question。
我想要做的是设置颜色顺序和样式顺序,以便独立应用。
例如,如果我将DefaultAxesColorOrder
设置为[1 0 0; 0 1 0; 0 0 1]
而将DefaultAxesLineStyleOrder
设置为'-|--|:'
,则行将为'r-'
,'g-'
,{ {1}},'b-'
,'r--'
,'g--'
,'b--'
,'r:'
,'g:'
。我想要行'b:'
,'r-'
,'g--'
。
答案 0 :(得分: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
答案 1 :(得分: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)。然后我通过
将它们缩放到[0,1]c = fieldnames(colors);
for i = 1:numel(c)
colors.(c{i}) = colors.(c{i})/255;
end