答案较晚,但要补充两点:
- 有关如何更改
'ColorOrder'
属性以及如何使用设置全局默认值的信息'DefaultAxesColorOrder'
,请参阅本文底部的“附录”。
- 如果您有图像处理工具箱来使用它,则在MATLAB Central File Exchange上有一个很棒的工具可以生成任意数量的视觉上不同的颜色。继续阅读以获取详细信息。
该ColorOrder
axes
属性允许MATLAB来自动循环的颜色的列表使用时hold on/all
(同样,请参阅下面如何附录set
/ get
所述ColorOrder
特定轴线或全局通过DefaultAxesColorOrder
)。但是,默认情况下,MATLAB仅指定要循环显示的一小段颜色(从R2013b开始只有7种),另一方面,为更多数据系列找到一组好的颜色可能会成问题。对于10个地块,您显然不能依靠default ColorOrder
。
定义N种视觉上不同的颜色的一种好方法是在MATLAB Central File File Exchange上提交“生成最大感知上不同的颜色”(GMPDC)。最好用作者自己的话来形容:
此函数生成一组颜色,这些颜色可以通过参考“实验室”颜色空间来区分,该颜色空间比RGB与人的颜色感知更接近。给定一个可能的颜色的初始大列表,迭代地选择列表中距离所有先前选择的条目最远(在Lab空间中)的条目。
例如,当要求25种颜色时:
GMPDC提交在MathWorks的官方博客上被选为2010年“本周精选” ,部分原因是它能够请求任意数量的颜色(与MATLAB内置的7种默认颜色相反)。他们甚至提出了极好的建议,将MATLAB的ColorOrder
启动设置为
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
使用axis属性简化了过程,不需要for
循环ColorOrder
:
尺寸X乘P乘X的%X
mpdc10 =杰出的色彩(10)
ha =轴;保持(ha,'on')
set(ha,'ColorOrder',mpdc10)%--- 在此处设置ColorOrder ---
plot(X(:,:,1),X(:,:,2),'-。')%不需要循环,不需要'Color'。好极了!
附录
要获取ColorOrder
用于当前轴的RGB阵列,
get(gca,'ColorOrder')
要获取ColorOrder
新轴的默认值,
get(0,'DefaultAxesColorOrder')
ColorOrder
在MATLAB开始时使用10种颜色设置新的global的示例,在startup.m
:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))