Матлаб сюжет разные цвета - PullRequest
1 голос
/ 21 июля 2011

У меня есть набор из точек (матрица Nx1) и групп для этих точек (матрица Nx1) . Я хочу изобразить эти точки (нет проблем, я делаю это так: plot(points, groups, 'o');), но я бы хотел установить уникальный цвет для каждой группы. Как я могу это сделать? Сейчас у меня всего две группы (1,2).

Ответы [ 3 ]

3 голосов
/ 21 июля 2011

Используйте логическое индексирование, чтобы выбрать нужные вам точки

figure;
hold all; % keep old plots and cycle through colors

ind = (groups == 1); % select all points where groups is 1

% you can do all kind of logical selections here:
% ind = (groups < 5)

plot(points(ind), groups(ind), 'o');
2 голосов
/ 21 июля 2011

Учитывая некоторые случайные данные:

points = randn(100,1);
groups = randi([1 2],[100 1]);

Вот еще несколько общих рекомендаций:

g = unique(groups);           %# unique group values 
clr = hsv(numel(g));          %# distinct colors from HSV colormap
h = zeros(numel(g),1);        %# store handles to lines
for i=1:numel(g)
    ind = (groups == g(i));   %# indices where group==k
    h(i,:) = line(points(ind), groups(ind), 'LineStyle','none', ...
        'Marker','.', 'MarkerSize',15, 'Color',clr(i,:));
end
legend(h, num2str(g,'%d'))
set(gca, 'YTick',g, 'YLim',[min(g)-0.5 max(g)+0.5], 'Box','on')
xlabel('Points') ylabel('Groups')

scatter_lines

Если у вас есть доступ к статистикеВ панели инструментов есть функция, которая упрощает все вышеперечисленное в одном вызове:

gscatter(points, groups, groups)

Наконец, в этом случае было бы более уместно отобразить Box plot :

labels = num2str(unique(groups),'Group %d');
boxplot(points,groups, 'Labels',labels)
ylabel('Points'), title('Distribution of points across groups')

boxplot

0 голосов
/ 21 июля 2011

Предполагая, что количество групп известно априори:

plot(points(find(groups == 1)), groups(find(groups == 1)), points(find(groups == 2)), groups(find(groups == 2)));

find даст вам все индексы groups, для которых выполняется условие. Выходные данные find используются как подвекторы points и groups для каждого возможного значения groups.

Когда вы используете plot для построения более чем одной комбинации x-y, для каждого из них используется свой цвет.

В качестве альтернативы, вы можете просто явно выбрать каждый цвет:

hold on
plot(points(find(groups == 1)), groups(find(groups == 1)), 'r')
plot(points(find(groups == 2)), groups(find(groups == 2)), 'y')

Наконец, есть способ заставить plot автоматически переключаться между цветами автоматически, так что вы можете вызвать plot без указания цвета, но метод ускользает от меня.

...