2016-03-09 2 views
0

Я рисую сгруппированный график рассеяния с разными цветами. Я разрешаю Matlab решать цвета, и он использует плоское отображение в цветовой карте (по умолчанию?).групповые линии того же цвета, что и рассеянные группы

Мне нужно использовать одинаковые цвета как в группе рассеяния для линий.

Однако по умолчанию ColorOrder линий не совпадает с разбросом. Следовательно, сброс 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 (индекс группы), и используется, чтобы индексировать непосредственно в цветовой палитре по умолчанию, но кажется, что scatters используют другую цветовую палитру?

+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 s получить цвета от lines в естественном порядке),

colormap(lines(N)); 

где N является число групп , должен сделать scatter и соответствие цветов линий.

+0

Решение действительно. Не следуя тому, что вы подразумеваете под этим: «это имеет смысл, так как с помощью стандартной цветовой палировки парулы прямое индексирование приведет к очень похожим цветам». Было бы также неплохо найти способ унаследовать цвета от разброса и передать их линиям, а не изменять. – Oleg

+0

@ Олег я уточнил (надеюсь) и добавил код, как получить цвета от разброса. – zeeMonkeez

Смежные вопросы