晚回答了,但有两点需要补充:
- 要了解如何更改
'ColorOrder'
属性并如何使用'DefaultAxesColorOrder'
设置全局默认值,请参阅本文底部的“附录”。
- 如果您有图像处理工具箱,则可以在 MATLAB 中央文件交换中找到一个很棒的工具,用于生成任意数量的视觉上不同的颜色。请继续阅读以获取详细信息。
ColorOrder
axes
属性使 MATLAB 在使用 hold on/all
时自动循环显示一系列的颜色(再次参见下面的“附录”,了解如何通过 set/get
对特定轴或通过 DefaultAxesColorOrder
全局设置 ColorOrder
)。然而,默认情况下MATLAB 只指定了一个短列表的颜色(截至 R2013b,只有 7 种)进行循环显示,另一方面,对于更多数据系列来说,找到一组好的颜色可能是有问题的。显然对于10个绘图,您不能依赖默认的ColorOrder
。
一个很好的方法是定义 N 种视觉上不同的颜色,使用 MATLAB 中央文件交换网站上的“生成视觉上最大程度区分颜色” (GMPDC) 工具。最好由作者自己来描述:
此函数生成一组颜色,这些颜色可以通过参考“Lab”颜色空间进行区分,该颜色空间比 RGB 更接近于人类的色彩感知。给定一份初始的可能颜色列表,它会迭代地选择与所有先前选择条目最远(在 Lab 空间中)的条目。
例如,当需要25种颜色时:
GMPDC 工具是 MathWorks 官方博客在2010年评选的本周之选,部分原因是它能请求任意数量的颜色(与 MATLAB 内置的7种默认颜色相比)。他们甚至提出了一个很好的建议,在启动时将 MATLAB 的ColorOrder
设置为:
distinguishable_colors(20)
当然,你可以为单个轴设置
ColorOrder
或者生成一个颜色列表以任何你想要的方式使用。例如,要生成10个“最大感知差异颜色”,并将它们用于同一轴上的10个图(
但不使用 ColorOrder
,因此需要使用循环):
mpdc10 = distinguishable_colors(10)
hold on
for ii=1:size(X,2),
plot(X(:,ii,1),X(:,ii,2),'.','Color',mpdc10(ii,:));
end
иҝҷдёӘиҝҮзЁӢеҸҜд»Ҙз®ҖеҢ–пјҢдҪҝз”ЁColorOrder
иҪҙеұһжҖ§иҖҢж— йңҖдҪҝз”Ёfor
еҫӘзҺҜпјҡ
% Xзҡ„еӨ§е°ҸдёәNГ—PГ—2
mpdc10 = distinguishable_colors(10)
ha = axes; hold(ha,'on')
set(ha,'ColorOrder',mpdc10) % --- еңЁжӯӨеӨ„и®ҫзҪ®ColorOrder ---
plot(X(:,:,1),X(:,:,2),'-.') % ж— йңҖеҫӘзҺҜпјҢд№ҹдёҚйңҖиҰҒдҪҝз”ЁвҖңColorвҖқеұһжҖ§гҖӮеӨӘеҘҪдәҶ!
йҷ„еҪ•
иҰҒиҺ·еҸ–еҪ“еүҚиҪҙдҪҝз”Ёзҡ„ColorOrder
RGBж•°з»„пјҢ
get(gca,'ColorOrder')
要获取新轴的默认 ColorOrder
,
get(0,'DefaultAxesColorOrder')
在 MATLAB 启动时,使用以下代码设置包含 10 种颜色的新全局 ColorOrder
,在 startup.m
文件中实现:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))
hold on
在功能上等同于hold all
。但是,如何获得超过默认7种颜色的问题仍然存在。可以使用默认颜色映射作为解决方案,如Azim所述,也可以使用生成颜色函数来调整以便易于视觉区分,具体方法见以下链接:https://dev59.com/0HI-5IYBdhLWcg3wEEDu#22029354。 - chappjchold on
仅仅是防止 MATLAB 在进行新的plot
调用时擦除先前的绘图。而hold all
则会为后续的plot
调用分配新的属性。 - Doresoomhold on
会产生不同颜色的图形。您正在使用旧版本。根据当前文档,"hold all
"与"hold on
"相同。注意:此语法将在将来的版本中移除。请改用"hold on
"。另请参阅发行说明。 - chappjc