当我在MATLAB中循环绘图时如何给出不同的颜色?

Cha*_*how 4 matlab plot

我有一些数据说X尺寸(100,2).该X由10个类别(10个集合)的数据组成.现在我想查看每个类别的数据模式.为此,我需要为每个类别分配不同的颜色.我试图循环而不是做10个不同的情节.我试过以下.

hold on
for i=1:10:100
   plot(X(i:i+9,1),X(i:i+9,2),'.')
end
hold off
Run Code Online (Sandbox Code Playgroud)

这给了我一个相同颜色的情节.如何为不同的范围指定不同的颜色?

cha*_*pjc 7

提到的答案hold all对于在ColorOrder axes属性指定的颜色中循环是正确和有用的(即使hold on现在等同于hold all).但是,默认情况下,MATLAB仅指定一个简短的颜色列表(R2013b中只有7个)循环,另一方面,为更多数据系列找到一组好的颜色可能会有问题.对于10个图,您显然不能依赖于默认值ColorOrder,因此定义N个视觉上不同颜色的一种好方法是使用MATLAB中央文件文件交换中"生成最大感知 - 不同颜色"(GMPDC)提交.最好用作者自己的话来描述:

该函数生成一组颜色,这些颜色可通过参考"Lab"颜色空间来区分,该颜色空间比RGB更接近地匹配人类颜色感知.给定可能颜色的初始大列表,它迭代地选择列表中距离所有先前选择的条目最远(在实验室空间中)的条目.

例如,以下是请求25时生成的颜色:

25

几年前,GMPDC提交的作品被MathWorks官方博客选为Pick of the Week,部分原因是它能够请求任意数量的颜色(与MATLAB内置的7种默认颜色形成对比).他们甚至提出了ColorOrder在启动时设置MATLAB的优秀建议,

distinguishable_colors(20)
Run Code Online (Sandbox Code Playgroud)

当然,您可以设置ColorOrder单轴或只是生成一个颜色列表,以您喜欢的任何方式使用.例如,要生成10"最大感知 - 不同颜色"并在同一轴上使用它们10个图(不使用ColorOrder):

% Starting with X of size 100x2
X = reshape(X,10,10,2); % for clarity, column is category, row is observation
mpdc10 = distinguishable_colors(10) % 10x3 color list
hold on
for ii=1:10,
    plot(X(:,ii,1),X(:,ii,2),'.','Color',mpdc10(ii,:));
end
Run Code Online (Sandbox Code Playgroud)

或者,使用ColorOrderaxis属性可简化过程:

X = reshape(X,10,10,2); % for clarity, and to avoid loop
mpdc10 = distinguishable_colors(10) % 10x3 color map
ha = axes; hold(ha,'on')
set(ha,'ColorOrder',mpdc10)
plot(X(:,:,1),X(:,:,2),'-.') % loop NOT needed, 'Color' NOT needed
Run Code Online (Sandbox Code Playgroud)

附录

要获取ColorOrder用于当前轴的RGB数组,

get(gca,'ColorOrder')
Run Code Online (Sandbox Code Playgroud)

要获取ColorOrder新轴的默认值,

get(0,'DefaultAxesColorOrder')
Run Code Online (Sandbox Code Playgroud)

ColorOrder在MATLAB 上设置10种颜色的新全局的示例,在startup.m:

set(0,'DefaultAxesColorOrder',distinguishable_colors(10))
Run Code Online (Sandbox Code Playgroud)