2013-09-20 5 views
1

Редактировать для ясности:Matlab общая матрица индексации экранным несколько рядов

У меня есть две матрицы, p.valor 2x1000 и 1x1000 p.clase. p.valor состоит из случайных чисел, охватывающих от -6 до 6. p.clase содержит, 200, 1: s, 200 2: s и 600 3: s. То, что я wan't сделать это

печать p.valor используя цвет/с различной подсказкой для каждого Clase определяется в p.clase, как в следующем figure.

я сначала написал это, для того, чтобы выяснить, какие места в p.valor, где представлены соответствующие 1,2 3 где в p.clase

%identify the locations of all 1,2 respective 3 in p.clase 
    f1=find(p.clase==1); 
    f2=find(p.clase==2); 
    f3=find(p.clase==3); 

%define vectors in p.valor representing the locations of 1,2,3 in p.clase  
    x1=p.valor(f1); 
    x2=p.valor(f2); 
    x3=p.valor(f3); 

Существует 200 из них (1) в p.valor, таким образом, равен x1 = (1: 200). Проблема в том, что каждый номер один (1) (и, соответственно, 2 и 3) представляет собой два элемента в p.valor, так как p.valor имеет 2 строки. Так что даже если p.clase и, следовательно, x1 теперь имеют только одну строку, мне нужно включить элементы в те же колоны, что и все местоположения в f1.

Так что различные альтернативы, которые я пробовал, еще не были успешными. Примеры:

plot(x1(:,1), x1(:,2),'ro') 
hold on 
plot(x2(:,1),x2(:,2),'k.') 
hold on 
plot(x3(:,1),x3(:,2),'b+') 

и

y1=p.valor(201:400); 
    y2=p.valor(601:800); 
    y3=p.valor(1401:2000); 

    scatter(x1,y1,'k+') 
    hold on 
    scatter(x2,y1,'b.') 
    hold on 
    scatter(x3,y1,'ro') 

и

y1=p.valor(201:400); 
y2=p.valor(601:800); 
y3=p.valor(1401:2000); 


plot(x1,y1,'k+') 
hold on 
plot(x2,y2,'b.') 
hold on 
plot(x3,y3,'ro') 

Моих фигуры имеют axisies права, но нанесенные на график значение не соответствует правильному рисунку при условии (см верхней части вопроса) ,

Ergo, мой вопрос: как мне включить значения во второй строке в p.valor в моем графике?

Я надеюсь, что это яснее!

ответ

1

Значения из обоих рядов одновременно можно получить, используя следующий синтаксис:

X=p.value(:,findX) 

В этом случае, в результате чего X матрица будет представлять собой матрицу, имеющую 2 строки и столбцы length(findX).

+0

Я добавил свой код к вопросу, чтобы вы могли видеть, как я пытался применить то, что вы сказали. Однако, когда я делаю это, я получаю цифру со всеми правильными значениями y, но только 1 и 2 для значений x. Моя фигура должна выглядеть примерно как [это] (http://imgur.com/NDfHWM4) – MatlabNoob

+0

@MatlabNoob, если у вас есть панель инструментов статистики, вы должны проверить функцию gscatter – Dan

1
M = magic(5) 

M = 

    17 24 1 8 15 
    23 5 7 14 16 
    4 6 13 20 22 
    10 12 19 21 3 
    11 18 25 2 9 

M2 = M(1:2, :) 

M2 = 

    17 24 1 8 15 
    23 5 7 14 16 

Matlab использует столбец основной индексации. Итак, чтобы перейти к следующей строке, вам просто нужно добавить 1. Добавление 2 к индексу на M2 приводит вас к следующей колонке или добавлению 5 к индексу на M

например. M2(3) - 24. Чтобы перейти к следующей строке, вы просто добавите один i.e. M2(4) возвращает 5. Чтобы перейти к следующему столбцу, добавьте количество строк, так что M2(2 + 2) доставит вам 1. Если вы добавите количество столбцов, как вы предполагали, вы просто получите тарабарщину.

Так что ваш метод очень неправильный. Метод Фрейда на 100% правильный, гораздо проще использовать индексирование индекса, чем линейное индексирование. Но я просто хотел объяснить, почему то, что вы пытались, не работает в Matlab.(кроме того, что X=p.value(findX findX+1000) дает вам синтаксическую ошибку, я предполагаю, что вы имели в виду X=p.value([findX findX+1000]))

+0

Спасибо! Я также попытался использовать индексную индексацию столбца, написав 'x1 = p.valor (f1);' 'y1 = p.valor (f1 + 1);' 'plot (x1, y1, 'r.') ', но у графика, который у меня теперь есть, есть ось x, охватывающая от 0 до 600), то есть количество столбцов), когда мои значения только от -6 до 6. Что я могу сделать, чтобы было ясно, что это значения чисел в конкретных местах, а не само местоположение, которое я хочу построить? – MatlabNoob

+0

@MatlabNoob, извините, я не преследую вас. – Dan

+0

Да, извините, я не слежу за собой @ Dan. Я обновлю свой вопрос, чтобы было легче понять – MatlabNoob

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