如何为一些 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')
如何在没有亮黄色的情况下使用棱镜或其他颜色图?有没有更好的方法在同一张图中绘制几条独立的轨迹,并且颜色分离非常清晰?
使用colormap
和rgb
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)
我需要在几个 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')
如何在没有亮黄色的情况下使用棱镜或其他颜色图?有没有更好的方法在同一张图中绘制几条独立的轨迹,并且颜色分离非常清晰?
使用colormap
和rgb
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)