matlab figure用法 plot用法 - 自动绘制不同的彩色线条




3 Answers

您可以使用HSV等颜色映射生成一组颜色。 例如:

cc=hsv(12);
figure; 
hold on;
for i=1:12
    plot([0 1],[0 i],'color',cc(i,:));
end

MATLAB有13种不同的命名颜色映射( 'doc colormap'列出它们全部)。

用不同颜色绘制线的另一种选择是使用LineStyleOrder属性; 请参阅在MATLAB文档中定义绘图线的颜色以获取更多信息。

figure函数 plot函数

我试图在同一个图上绘制几个核密度估计,我希望它们都是不同的颜色。 我有一个使用字符串'rgbcmyk'并逐步遍历每个单独的阴谋的kludged解决方案,但我开始有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



迟到的答案,但要添加两件事:

  • 有关如何更改'ColorOrder'属性以及如何使用'DefaultAxesColorOrder'设置全局默认值'DefaultAxesColorOrder' ,请参阅本文底部的“附录”。
  • 如果您有图像处理工具箱可以使用它,那么MATLAB Central File Exchange上有一个很棒的工具可以生成任意数量的视觉上不同的颜色。 详情请阅读。

ColorOrder axes属性允许MATLAB在使用hold on/all时自动循环显示一系列颜色(同样,请参阅下面的附录以了解如何set / get特定轴的ColorOrder或通过DefaultAxesColorOrder全局)。 但是,默认情况下, MATLAB只能指定一个颜色的简短列表(R2013b 只有7个来循环,另一方面,为更多数据序列找到一组好的颜色可能会有问题。 对于10个图,显然不能依赖默认的ColorOrder

定义N种视觉上不同颜色的好方法是在MATLAB中央文件文件交换中提交“生成最大感知色差”(GMPDC)提交 。 最好用作者自己的话来描述:

该功能生成一组可以通过参考“Lab”色彩空间来区分的色彩 ,它比RGB更接近人类色彩感知。 给定一个可能的颜色的最初的大列表,它反复选择列表中最远(在Lab空间中)的所有先前选择的条目中的条目。

例如,当请求25种颜色时:

GMPDC提交的作品在MathWorks的官方博客上被选为2010年度Pick of the Week ,部分原因是能够请求任意数量的颜色(与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

该过程被简化, 不需要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')

要获取新轴的默认ColorOrder

get(0,'DefaultAxesColorOrder')

startup.m启动MATLAB时,使用10种颜色设置新的全局ColorOrder示例:

set(0,'DefaultAxesColorOrder',distinguishable_colors(10))



如果所有矢量的大小相同,则创建一个矩阵并绘制它。 每列都自动绘制不同的颜色然后您可以使用legend来指示列:

data = randn(100, 5);

figure;
plot(data);

legend(cellstr(num2str((1:size(data,2))')))

或者,如果您有一个带有内核名称的单元,请使用

legend(names)



Related