4

我有一些数据说 X 的大小为 (100,2)。这个 X 由 10 个类别(10 个一组)的数据组成。现在我想看看每个类别的数据中的模式。为此,我需要为每个类别分配不同的颜色。我试图循环而不是做 10 个不同的情节。我尝试了以下。

hold on
for i=1:10:100
   plot(X(i:i+9,1),X(i:i+9,2),'.')
end
hold off

这给了我一个相同颜色的情节。如何为不同的范围分配不同的颜色?

4

3 回答 3

7

提到的答案hold all是正确的并且对于循环通过ColorOrder axes属性指定的颜色有用(即使hold on现在等同于hold all)。但是,默认情况下,MATLAB 只指定一个简短的颜色列表(从 R2013b 开始只有 7 个)以循环通过,另一方面,为更多数据系列找到一组好的颜色可能会有问题。对于 10 个绘图,您显然不能依赖默认值ColorOrder,因此定义 N 种视觉上不同颜色的好方法是使用MATLAB Central File Exchange 上的“Generate Maximally Perceptually-Distinct Colors”(GMPDC)提交。最好用作者自己的话来描述:

此函数生成一组颜色,这些颜色可通过参考“Lab”颜色空间进行区分,与 RGB 相比,它更接近人类的颜色感知。给定一个可能颜色的初始大列表,它迭代地选择列表中与所有先前选择的条目最远(在实验室空间中)的条目。

例如,以下是请求 25 时生成的颜色:

25

几年前, GMPDC 提交在 MathWorks 的官方博客上被选为每周精选,部分原因是能够请求任意数量的颜色(与 MATLAB 内置的 7 种默认颜色相反)。他们甚至提出了将 MATLABColorOrder在启动时设置为的极好建议,

distinguishable_colors(20)

当然,您可以ColorOrder为单个轴设置 ,或者简单地生成一个颜色列表,以您喜欢的任何方式使用。例如,要生成 10 个“最大感知不同的颜色”并将它们用于同一轴上的 10 个图(不使用ColorOrder):

% Starting with X of size 100x2
X = reshape(X,10,10,2); % for clarity, column is category, row is observation
mpdc10 = distinguishable_colors(10) % 10x3 color list
hold on
for ii=1:10,
    plot(X(:,ii,1),X(:,ii,2),'.','Color',mpdc10(ii,:));
end

或者,使用ColorOrder轴属性可以简化过程:

X = reshape(X,10,10,2); % for clarity, and to avoid loop
mpdc10 = distinguishable_colors(10) % 10x3 color map
ha = axes; hold(ha,'on')
set(ha,'ColorOrder',mpdc10)
plot(X(:,:,1),X(:,:,2),'-.') % loop NOT needed, 'Color' NOT needed

附录

要获取ColorOrder用于当前轴的 RGB 数组,

get(gca,'ColorOrder')

要获得ColorOrder新轴的默认值,

get(0,'DefaultAxesColorOrder')

ColorOrder在 MATLAB 开始时使用 10 种颜色设置新全局的示例,在startup.m

set(0,'DefaultAxesColorOrder',distinguishable_colors(10))
于 2013-10-14T05:36:18.190 回答
4

最简单的解决方案是替换hold onhold all.

如果您想要更多控制,您必须手动定义您的线路规格(更多信息在这里),然后将它们传递给plot

linespec = {'b.', 'r-', 'g--o'}; % define your ten linespecs in a cell array
hold on
for i=1:10:100
   plot(X(i:i+9,1),X(i:i+9,2),linespec{i})
end
hold off
于 2013-10-13T20:35:57.343 回答
1

hold on确保新plot命令添加到绘图而不是替换它。但是,每个命令都好像在生成一个新图,包括从第一行颜色(蓝色)开始。如果您希望后续绘图使用不同的颜色,请hold all改用。这样,依次使用标准的 7 种线条颜色。

由于要绘制 10 条线,因此您可能需要明确指定颜色以确保它们都不同。为此,请使用语法

plot(..., 'Color', [r g b])
于 2013-10-13T20:37:51.160 回答