2017-02-16 20 views
1

У меня есть матрица, где некоторые значения имеют -1 как признак того, что произошла ошибка. Обычно я бы просто использовал ylim([0 100]), чтобы не показывать эти значения на моем графике, но при использовании линейного графика соединение все равно будет падать до точки. Мне нужна диаграмма, состоящая из строк, а не графика рассеяния. Есть ли простой способ игнорировать отрицательные значения при построении линии и подключать только положительные значения при использовании функции plot в MATLAB?Как игнорировать значения, которые являются отрицательными при построении графика линии с помощью Matlab?

Я написал небольшую примерную программу, которая ведет себя аналогично, но способ, которым я пользуюсь, кажется немного «слишком сложным», и я хочу знать, есть ли более простой способ достичь этого. Он отлично работает, когда я помещаю значения в NaN, и теперь значения x и y имеют одинаковую сумму. Однако удаление или сортировка значений из вектора приведет к различному количеству значений x и y.

Я надеялся на модификацию или флаг или что-то в этом роде.

x = 2*rand(10) - rand(10) 
xx = 10:10:100; 

figure; 
for i=1:length(x) 
    for j=1:length(x(i,:)) 
     if x(i,j) < 0 
      x(i,j) = NaN; 
     end 
    end 
end 

plot(xx,x) 

Обратите внимание, что это всего лишь пример, весь код будет слишком большой, чтобы опубликовать его здесь.

При наличии без соответствующих x -величины (так что функция участок просто использует 1,2,3... и так далее для соответствующих значений y), это может быть достигнуто путем использования

plot(x(x>0)) 

В этом случае соответствующие значения разные, в реальном коде они измеряются данными, здесь я просто использую 10-й шаг для упрощения.

x = 2*rand(10) - rand(10) 
xx = 10:10:100; 

plot(xx,x(x>0)) 

Приведенный выше код будет зависеть от сообщения "Векторы должны быть одинаковой длины".

+0

У вас есть такой вектор, который вы хотите построить и содержит отрицательные значения, которые хотите удалить? –

+0

Я не хочу удалять отрицательные числа, я хочу, чтобы они не отображались в сюжете, так что при использовании линейного графика линия не соединяется с этим значением. – Kev1n91

+0

Я просто хочу быть уверен, что правильно понимаю. Вы хотите построить вектор без его отрицательных значений? –

ответ

4

Это похоже на использование NaN вместо отрицательных значений, только исходный вектор не изменяется вообще. Вы можете заметить, что это решение векторизовано.

y = 2*randn(10,1) - randn(10,1); 
figure(); plot(1:numel(y), y./(y<=0)); 
+0

Спасибо за ваш ответ! Когда я выполняю этот код, я получаю только пустую цифру, кто-то другой испытывает то же самое? Я использую Matlab R2016 b – Kev1n91

+0

@ Kev1n91, это вещь со случайностью ... Просто запустите ее несколько раз, пока не получите видимые строки ... –

+0

Конечно, d'oh. Однако это решение адресует соответствующие значения х? (Обратите внимание, что на вопрос было внесено редактирование) – Kev1n91

1
a = [50, -1, 10, 5, 8, 22, -1]; 
b = a > 0; 
c = a(b); 

Выход:

c 
[50, 10, 5, 8, 22] 

Теперь вы можете построить с

[~, s] = size(c); 
xx = 1:1:s; 

Вы также можете сделать это непосредственно, без сохранения расчета и его модификации. просто заговорите. plot(x(x>0))

+2

Или если OP не хочет изменять данные, 'plot (x (x> 0))' –

+0

@AnderBiguri, истинный, но первый метод, вероятно, будет более понятным для него. –

+0

Спасибо за ваш ответ, я сделал редактирование на свой пост. У меня есть соответствующие значения x, если я меняю его так, как показано сообщение, тогда значение значений x для значений y выключено. Даже с отрицательным значением (-1) все еще есть соответствующий. Мне нужно было бы изменить их оба и стереть соответствующее значение – Kev1n91

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

  • Нет связанных вопросов^_^