如何为一些 Matlab 绘图轨迹获得良好的颜色分离?

how to get good color separation for a few Matlab plot traces?

我需要在几个 plot() 轨迹之间有非常明显的分离。几个意味着可能有 2 或 3 或 5 条时间历史轨迹或 XY 图。

棱镜很好用,有 7 种截然不同的颜色,但它的黄色在默认的白色背景上几乎看不到。

这是一个使用默认颜色的示例。它们非常好,但仍然有些柔和的粉彩。我更喜欢比默认颜色更亮的颜色:

figure(1)
clf
x=1:100;
for i = 1:7
  y=i*log(x);  
  plot(x,y, 'Linewidth', 5);
  legendStr{i}=sprintf('line %i',i);
  hold on
end
grid on
legend(legendStr,'location','best')

如何在没有亮黄色的情况下使用棱镜或其他颜色图?有没有更好的方法在同一张图中绘制几条独立的轨迹,并且颜色分离非常清晰?

使用colormaprgb

rgb代表红绿蓝,只需设置你想要最终混合的每种主要颜色的百分比(比例)颜色

rgb = [0 0 0] ---> 0%Red + 0%Green + 0%Blue = Black
rgb = [1 0 0] ---> 100%Red + 0%Green + 0%Blue = Red

我用的是[0, 1],这里是1 means 100%0 means 0%,你可以设置0 and 1之间的任意值 代码如下

% Set the color you want using rgb
map = [0 0 0         %---> 1st color 
       1 0 0         %---> 2nd color
       0 1 0         %---> 3rd color
       0 0 1         %---> 4th color
       1 0.5 1       %---> 5th color
       0.2 0.5 0.75  %---> 6th color
       0.5 0.3 0.8]; %---> 7th color

x=1:100;
y = zeros(100, 7);
plt = zeros(1,7);
for i = 1:7
  y(:,i)=i*log(x);  
   % For each iteration use different map color, like map(1, :)-->[0 0 0]
   plt(i) = plot(x,y(:, i), 'Color',colormap(map(i, :)), 'Linewidth', 5);
   hold on

end

legend(plt,{'1st Color','2nd Color', '3rd Color', '4th Color', ...
    '5th Color', '6th Color', '7th Color'});
set(gca,'FontSize',20)
xlabel('x-axis','color', 'red', 'fontSize', 25)

ylabel('y-axis', 'color','red', 'fontSize', 25)

图表

prism 调色板有 6 种独特的颜色,而不是 7 种。cm=prism(6) returns 这 6 种颜色。第三个是黄色的,我们可以用cm(3,:)=[].

去掉它

我们现在可以使用轴对象的 ColorOrder 属性 设置绘图的默认颜色顺序(参见 here):

cm = prism(6);
cm(3,:) = [];
set(gca,'ColorOrder',cm);

现在,绘制到此轴对象时,将循环显示这 5 种颜色(请记住设置 hold on,这样轴属性不会被重置)。

要更改当前 MATLAB 会话中所有后续绘图的颜色,请更改默认颜色顺序:

set(groot,'defaultAxesColorOrder',cm)