2010-12-17 8 views
2

J'ai quelques graphiques. L'utilisateur peut supprimer tous les points sélectionnés.Comment contrôler la suppression de points dans MATLAB?

Comment puis-je savoir quels points ont été supprimés par l'utilisateur? Par "supprimé", j'entends l'utilisation de l'outil MATLAB tel que "Brush/Select Tool", puis en cliquant sur le bouton Delete.

Répondre

3

Si vous enregistrez les données x et y qui est initialement tracée, vous pouvez comparer avec le reste 'XData' ou 'YData' dans la parcelle après que l'utilisateur supprime les points pour déterminer quels points ont été retirés:

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 

Vous mentionné dans un commentaire que vous tracez des intervalles RR, de sorte que vos données x doivent être un vecteur monotones de points de temps sans valeurs répétées. En tant que tel, vous pouvez trouver les points qui ont été enlevés en procédant comme suit:

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

Cela vous donne un logical index avec ceux pour les points qui ont été supprimés et des zéros pour les points qui sont toujours là. S'il n'y avait que deux points voisins supprimés par l'utilisateur (comme vous l'avez, bien que vous pouvez faire quelques vérifications pour être sûr), vous pouvez facilement remplacer ces deux points avec une valeur moyenne comme suit:

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 

et puis, vous pouvez mettre à jour la parcelle en conséquence:

set(hLine,'XData',xNew,'YData',yNew); 
+0

Je suis en train d'écrire un programme Viewer RR-intervalle, il y a une option que je voulais ajouter « supprimer Smooth », la sélection de l'utilisateur 2 points les Delets et au milieu de cette ligne [A, B] apparaît un nouveau point avec des cordes comme A1 (x/2, y/2), mais le problème principal est d'obtenir des cordes de points supprimés ... :( – AndrewShmig

+0

@Andrew: J'ai mis à jour ma réponse à montrez comment vous pouvez le faire. – gnovice

Questions connexes