迟到的答案,但要补充两点:
- 有关如何更改
'ColorOrder'
属性以及如何使用 设置全局默认值的信息'DefaultAxesColorOrder'
,请参阅本文底部的“附录”。
- MATLAB Central File Exchange 上有一个很棒的工具,可以生成任意数量的视觉上不同的颜色,如果您有图像处理工具箱可以使用它。请继续阅读以了解详细信息。
该ColorOrder
axes
属性允许 MATLAB 在使用时自动循环显示颜色列表(再次,请参阅下面的hold on/all
附录,了解如何set
/用于特定轴或全局通过)。但是,默认情况下,MATLAB 只指定一个简短的颜色列表(从 R2013b 开始只有 7个)以循环通过,另一方面,为更多数据系列找到一组好的颜色可能会出现问题。对于 10 个图,您显然不能依赖默认的.get
ColorOrder
DefaultAxesColorOrder
ColorOrder
定义 N 种视觉上不同颜色的好方法是使用MATLAB Central File File Exchange 上的“Generate Maximally Perceptually-Distinct Colors”(GMPDC)提交。最好用作者自己的话来描述:
此函数生成一组颜色,这些颜色可通过参考“Lab”颜色空间来区分,这比 RGB 更接近人类的颜色感知。给定一个可能颜色的初始大列表,它迭代地选择列表中与所有先前选择的条目最远(在实验室空间中)的条目。
例如,当请求 25 种颜色时:

GMPDC 提交在 MathWorks 的官方博客上被选为2010 年的每周精选,部分原因是能够请求任意数量的颜色(与 MATLAB 内置的 7 种默认颜色相反)。他们甚至提出了将 MATLABColorOrder
在启动时设置为的极好建议,
distinguishable_colors(20)
当然,您可以ColorOrder
为单个轴设置 ,或者简单地生成一个颜色列表,以您喜欢的任何方式使用。例如,要生成 10 个“最大感知不同的颜色”并将它们用于同一轴上的 10 个图(但不使用ColorOrder
,因此需要循环):
% Starting with X of size N-by-P-by-2, where P is number of plots
mpdc10 = distinguishable_colors(10) % 10x3 color list
hold on
for ii=1:size(X,2),
plot(X(:,ii,1),X(:,ii,2),'.','Color',mpdc10(ii,:));
end
该过程被简化,不需要for
循环,具有ColorOrder
轴属性:
% X 大小为 N×P×2
mpdc10 = 可区分颜色(10)
ha = 轴;保持(哈,'开')
set(ha,'ColorOrder',mpdc10) % ---在这里设置 ColorOrder ---
plot(X(:,:,1),X(:,:,2),'-.') %不需要循环,不需要'颜色'。耶!
附录
要获取ColorOrder
用于当前轴的 RGB 数组,
get(gca,'ColorOrder')
要获得ColorOrder
新轴的默认值,
get(0,'DefaultAxesColorOrder')
ColorOrder
在 MATLAB 开始时使用 10 种颜色设置新全局的示例,在startup.m
:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))