组线与散点组颜色相同

group-lines same color as scatter-groups

我正在绘制不同颜色的分组散点图。我让 Matlab 决定颜色,它使用平面映射到(默认?)颜色图中。

我需要使用与线条散点组中相同的颜色

但是,行的默认 ColorOrder 与散点图的不同。 因此,重置 ColorOrderIndex 不能解决问题。

目前我可以制作如下:

与:

% Data
N  = 3;
T  = 5;
xm = [6.3327    4.5682    6.1398
    7.6289    5.4423   10.5246
    3.5362    6.2185    8.2151
    6.6572    9.4543    7.4266
    6.1138    8.6453    8.2044];
ym = [7     0     7
    11     0    55
     1     1    18
    14     6    12
     8     2    22];
lm = [6.8176    0.3609    6.9693
   13.0347    0.5587   62.4217
    1.6841    0.8237   19.6712
    8.0186    4.1533   13.2623
    6.1108    2.7716   19.5666]

% Scatter groups
g = kron((1:N)',ones(T,1)); %// '
hs = scatter(xm(:),ym(:),[],g,'filled');
hold on

% Poisson group-fits
[xmsorted,posxm] = sort(xm);
posxm            = bsxfun(@plus, (0:N-1)*T, posxm);
hl               = plot(xmsorted,lm(posxm));

我试图从散点中获取 CDATA,它基本上是我的 g(组索引),并用它直接索引到默认颜色图中,但似乎散点使用不同的颜色图?

似乎 scatter 缩放到图的 colormap,而不是使用直接索引。所以如果 cm = colormap; 那么

round(1:((size(cm, 1) - 1) / (N - 1)):size(cm, 1))

应该return颜色图中的索引(参见this question)。默认 colormap 是 'parula',因此如果 scatter 使用直接索引而不是缩放,则组将具有非常相似的颜色。

要使后续的线图使用 scatter 的颜色,您可以使用

cm(round(1:((size(cm, 1) - 1) / (N - 1)):size(cm, 1)));

设置绘图的线条颜色。

或者,您可以更改图的 colormap:假设颜色顺序是默认值(即新的 plot 以自然顺序从 lines 获取颜色),

colormap(lines(N));

其中 N 是组数,应使 scatter 和线条颜色匹配。