Как контролировать удаление точек в MATLAB? - PullRequest
2 голосов
/ 17 декабря 2010

У меня есть графика. Пользователь может удалить любые выбранные точки.

Как я могу узнать, какие именно очки были удалены пользователем? Под «удаленным» я подразумеваю использование инструмента MATLAB, такого как «Инструмент Кисть / Выбор», а затем нажмите кнопку «Удалить».

1 Ответ

3 голосов
/ 17 декабря 2010

Если вы сохраните данные x и y, которые были изначально нанесены на график, вы можете сравнить их с остальными 'XData' или 'YData' на графике после пользователь удаляет точки, чтобы определить, какие точки были удалены:

x = 1:10;           %# The initial x data
y = rand(1,10);     %# The initial y data
hLine = plot(x,y);  %# Plot the data, saving a handle to the plotted line
%# ...
%# The user deletes two points here
%# ...
xRemaining = get(hLine,'XData');  %# Get the x data remaining in the plot
yRemaining = get(hLine,'YData');  %# Get the y data remaining in the plot

Вы упомянули в комментарии, что вы строите интервалы R-R, поэтому ваши данные x должны быть монотонно увеличивающимся вектором временных точек без повторяющихся значений. Таким образом, вы можете найти точки, которые были удалены, выполнив следующие действия:

removedIndex = ~ismember(x,xRemaining);  %# Get a logical index of the points
                                         %#   removed from x

Это дает вам логический индекс с единицами для удаленных точек и нулями для точек, которые все еще существуют. Если пользователь удалил только две соседние точки (как вы уже описали, хотя вам может потребоваться выполнить некоторую проверку, чтобы убедиться в этом), вы можете легко заменить эти две точки на среднее значение следующим образом:

index = find(removedIndex);  %# Get the indices from the logical vector
xNew = [x(1:index(1)-1) mean(x(index)) x(index(2)+1:end)];  %# New x vector
yNew = [y(1:index(1)-1) mean(y(index)) y(index(2)+1:end)];  %# New y vector

А затем вы можете обновить сюжет соответственно:

set(hLine,'XData',xNew,'YData',yNew);
...