Как контролировать удаление точек в MATLAB?
У меня есть немного графики. Пользователь может удалить любые выбранные точки.
Как я могу узнать, какие именно очки удалены пользователем? Под "удаленным" я подразумеваю использование инструмента MATLAB, такого как "Инструмент Кисть / Выбор", а затем нажмите кнопку "Удалить".
1 ответ
Если вы сохраните 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
Вы упомянули в комментарии, что вы строите интервалы RR, поэтому ваш 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);