Построение сгруппированного 2-мерного вектора в MATLAB - PullRequest
3 голосов
/ 11 мая 2010

Я пытаюсь построить график двухмерного вектора (2D-график). Но я не хочу, чтобы все точки данных имели одинаковый цвет на графике. Каждый пункт данных соответствует группе. Я хочу иметь разные цвета для каждой группы точек данных.

class=[1 3 2 5 2 5 1 3 3 4 2 2 2]

говорит, что каждая точка данных принадлежит к какой группе

X=[x1,y1;x2,y2;x3,y3;.....] 

количество этих точек данных совпадает с количеством элементов в векторе класса.

Теперь я хочу построить их на основе цветов.

Ответы [ 3 ]

4 голосов
/ 11 мая 2010

Вы можете использовать SCATTER , чтобы легко наносить на график данные разными цветами. Я согласен с @gnovice об использовании classID вместо class, кстати.

scatter(X(:,1),X(:,2),6,classID); %# the 6 sets the size of the marker.

EDIT

Если вы хотите отобразить легенду, вы должны использовать решение @ yuk или @ gnovice .

GSCATTER

%# plot data and capture handles to the points
hh=gscatter(randn(100,1),randn(100,1),randi(3,100,1),[],[],[],'on');
%# hh has an entry for each of the colored groups. Set the DisplayName property of each of them
set(hh(1),'DisplayName','some group')

ГРАФИК

%# create some data
X = randn(100,2);
classID = randi(2,100,1);
classNames = {'some group','some other group'}; %# one name per class
colors = hsv(2); %# use the hsv color map, have a color per class

%# open a figure and plot
figure
hold on
for i=1:2 %# there are two classes
id = classID == i;
plot(X(id,1),X(id,2),'.','Color',colors(i,:),'DisplayName',classNames{i})
end
legend('show')

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

2 голосов
/ 11 мая 2010

Посмотрите также на функцию GSCATTER из панели инструментов статистики. Вы можете указать цвет, размер и символ для каждой группы только один раз.

gscatter(X(:,1),X(:,2),classID,'bgrcm');

или просто

gscatter(X(:,1),X(:,2),classID); %# groups by color by default
2 голосов
/ 11 мая 2010

Во-первых, поскольку CLASS является встроенной функцией, я бы назвал ваш вектор classID.

Затем для каждого значения в classID вы можете сделать следующее:

index = (classID == 1);            %# Logical index of where classID is 1
plot(X(index,1),X(index,2),'r.');  %# Plot all classID 1 values as a red dot
hold on;                           %# Add to the existing plot
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...