Dor*_*oom 109 matlab plot matlab-figure
我试图在同一个图上绘制几个核密度估计,我希望它们都是不同的颜色.我有一个使用字符串的kludged解决方案,'rgbcmyk'并为每个单独的绘图单步执行,但我在7次迭代后开始重复.是否有更简单/更有效的方法来实现这一目标,并提供更多颜色选项?
for n=1:10
source(n).data=normrnd(rand()*100,abs(rand()*50),100,1); %generate random data
end
cstring='rgbcmyk'; % color string
figure
hold on
for n=1:length(source)
[f,x]=ksdensity(source(n).data); % calculate the distribution
plot(x,f,cstring(mod(n,7)+1)) % plot with a different color each time
end
Run Code Online (Sandbox Code Playgroud)
Azi*_*zim 130
您可以使用HSV等颜色图来生成一组颜色.例如:
cc=hsv(12);
figure;
hold on;
for i=1:12
plot([0 1],[0 i],'color',cc(i,:));
end
Run Code Online (Sandbox Code Playgroud)
MATLAB有13种不同的命名颜色图('doc colormap'列出所有颜色图).
绘制不同颜色的线条的另一个选择是使用LineStyleOrder属性; 有关详细信息,请参阅MATLAB文档中的定义绘图线的颜色.
cha*_*pjc 36
迟到的答案,但要添加两件事:
'ColorOrder'属性以及如何设置全局默认值的信息'DefaultAxesColorOrder',请参阅本文底部的"附录".该ColorOrder axes属性允许MATLAB自动通过使用当颜色列表周期hold on/all(同样,请参阅下面如何附录set/ get所述ColorOrder特定轴线或全局通过DefaultAxesColorOrder).但是,默认情况下,MATLAB仅指定一个简短的颜色列表(R2013b中只有7个)循环,另一方面,为更多数据系列找到一组好的颜色可能会有问题.对于10个图,你显然不能依赖默认值ColorOrder.
定义N个视觉上鲜明的颜色的好方法是在MATLAB中央文件文件交换中提交"生成最大感知 - 不同颜色"(GMPDC).最好用作者自己的话来描述:
该函数生成一组颜色,这些颜色可通过参考"Lab"颜色空间来区分,该颜色空间比RGB更接近地匹配人类颜色感知.给定可能颜色的初始大列表,它迭代地选择列表中距离所有先前选择的条目最远(在实验室空间中)的条目.
例如,当要求25种颜色时:

GMPDC提交在MathWorks的官方博客上被选为2010年的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 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
Run Code Online (Sandbox Code Playgroud)
使用axis属性简化了过程,不需要for循环ColorOrder:
% X of size N-by-P-by-2 mpdc10 = distinguishable_colors(10) ha = axes; hold(ha,'on') set(ha,'ColorOrder',mpdc10) % --- set ColorOrder HERE --- plot(X(:,:,1),X(:,:,2),'-.') % loop NOT needed, 'Color' NOT needed. Yay!
附录
要获取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)
小智 12
迟到了.我自己正在研究这个,并且刚刚发现了这个名为ColorOrder的轴选项,您可以指定会话的颜色顺序或仅为图形,然后只绘制一个数组,让MATLAB自动循环指定的颜色.
例
set(0,'DefaultAxesColorOrder',jet(5))
A=rand(10,5);
plot(A);
Run Code Online (Sandbox Code Playgroud)
如果所有向量的大小相同,则创建一个矩阵并绘制它。每列都自动用不同的颜色绘制然后您可以使用legend来指示列:
data = randn(100, 5);
figure;
plot(data);
legend(cellstr(num2str((1:size(data,2))')))
Run Code Online (Sandbox Code Playgroud)
或者,如果您有一个带有内核名称的单元格,请使用
legend(names)
Run Code Online (Sandbox Code Playgroud)