Domanda

Ho alcuni elementi grafici. L'utente può cancellare tutti i punti selezionati.

Come faccio a sapere che i punti esattamente utente cancellato? Con "cancellato" Voglio dire utilizzando lo strumento MATLAB come "pennello / strumento di selezione" e quindi facendo clic sul pulsante Elimina.

È stato utile?

Soluzione

Se si salvano i dati x e y che è inizialmente tracciato, è possibile confrontare che con il rimanente 'XData' o 'YData' nella trama dopo i punti Elimina utente per determinare quali punti sono stati rimossi:

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

Hai menzionato in un commento che si sta tramando intervalli R-R, quindi i dati x dovrebbero essere un monotono crescente vettore di punti di tempo senza valori ripetuti. Come tale, è possibile trovare i punti che sono stati rimossi facendo quanto segue:

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

Questo vi dà un logica indice con quelle per i punti che sono stati rimossi e zeri per i punti che sono ancora lì. Se ci fossero solo due punti vicini rimossi dall'utente (come hai descritto, anche se si consiglia di fare qualche controllo per essere sicuri), si può facilmente sostituire i due punti con un valore medio nel seguente modo:

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

E poi si può aggiornare la trama di conseguenza:

set(hLine,'XData',xNew,'YData',yNew);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top