2016-03-09 125 views
0

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

我需要使用相同的颜色与分散组中的行相同。

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

目前我能产生follwing:

enter image description here

有:

% 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(群系数),并且使用它直接索引到默认的颜色映射,但似乎散射使用不同的颜色映射?

+2

您的示例需要工具箱。做任何[这些](http://stackoverflow.com/questions/30183701/reset-colororder-index-for-plotting-in-matlab-octave)有帮助吗? [Luis'回答'ColorOrderIndex''属性](http://stackoverflow.com/a/30185215/2748311)可能是最简单的。 – excaza

+0

@excaza感谢您指出tb依赖关系,我对数据进行了硬编码。这正是我所说的使用不同的色彩图分散,重置ColorIndex没有效果。 – Oleg

+1

对于那些标记重复的人:我不认为这是链接问题的重复。这与ColorOrderIndex无关。 – zeeMonkeez

回答

2

看起来scatter缩放到图的colormap,而不是使用直接索引。所以,如果cm = colormap;然后

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

应在颜色表中返回指数(见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与线条颜色相符。

+0

该解决方案是有效的。不遵循你的意思:“这是有道理的,因为parula直接索引的默认颜色映射会导致非常相似的颜色”。也很高兴找到一种方法来从scatter继承颜色并将它们传递给行,而不是更改。 – Oleg

+0

@ Oleg我澄清了(我希望)并添加了如何从散布中获取颜色的代码。 – zeeMonkeez