2014-11-14 1 views
0

В настоящее время у меня есть векторы меток Y, которые описывают каждый столбец моей матрицы данных X. Например, если Y = 1, то X имеет первый класс. Я пытаюсь построить X как другой цвет (или форму), основанный на значении Y. Есть ли более быстрый способ сделать это, чем мой код ниже? В настоящее время я использую цикл for, который занимает некоторое время, когда я использую большое количество данных.В Matlab, что самый быстрый способ присвоить разные значения меток при построении графика

n = size(Y); 
for i = 1:n(2) 
    if Y(i) == 1 
     colour = 'y'; 
     shape = 'c'; 
    elseif Y(i) == 2 
     colour = 'm'; 
     shape = 'c'; 
    elseif Y(i) == 3 
     colour = 'c'; 
     shape = 'c'; 
    elseif Y(i) == 4 
     colour = 'r'; 
     shape = 'c'; 
    elseif Y(i) == 5 
     colour = 'g'; 
     shape = 'c'; 
    elseif Y(i) == 6 
     colour = 'b'; 
     shape = 'c'; 
    elseif Y(i) == 7 
     colour = 'k'; 
     shape = 'c'; 
    elseif Y(i) == 8 
     colour = 'r'; 
     shape = 's'; 
    elseif Y(i) == 9 
     colour = 'b'; 
     shape = 's'; 
    elseif Y(i) == 10 
     colour = 'g'; 
     shape = 's'; 
    end 
    subplot 
    scatter(X(1,i), X(2,i), 12, colour, shape, 'filled') 
    hold on 
end 

ответ

2

Вы можете избавиться от всех ваших if/elseif петель:

n = size(Y); 
colour = {'y','m','c','r','g','b','k','r','b','g'}; 
shape = {'c','c','c','c','c','c','c','s','s','s'}; 
for ii = 1:n(2) 
    subplot 
    scatter(X(1,ii), X(2,ii), 12, colour{Y(ii)}, shape{Y(ii)}, 'filled') 
    hold on 
end 
+0

Awesome, но как это определить, какие Y нумеруют координаты X соответствуют? – user3457834

+0

@ user3457834 Вы правы, я был слишком быстр в ответе. Я обновил свой ответ, надеюсь, теперь он должен работать. – am304

+0

О, я вижу, большое спасибо! – user3457834