IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

supprimer lignes matrice par clique sur figure ?


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut supprimer lignes matrice par clique sur figure ?
    Salut tous,

    je me pose une question :

    => est il possible de supprimer des points d'une courbe en cliquant dessus ?

    je m'explique :

    j'ai une matrice A et je trace A(:,2) en fonction de A(:,1). En faisant ceci je trouve en regardant la figure que des points sont abérant. Comme je trouve que c'une peu galère de reperer manuellement à quel indice est ce point je voudrais cliquer sur la figure pour que matlab me dise à quel index ça correspond dans ma matrice....

    Pourriez vous me dire le nom de la fonction qui fait ceci ?

    merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 95
    Points : 150
    Points
    150
    Par défaut
    Je ne connais pas de fonction qui permette de faire cela automatiquement. Je ne suis pas sûr que tu puisses le faire autrement que en lisant les coordonnées avec data cursor puis supprimer ce point.

    A la limite, si tu connais l'équation de ta courbe (ou en la faisant trouver par Matlab), tu peux imaginer supprimer les points qui en sont trop éloignés peut être?

  3. #3
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Hello !

    Je me suis déjà penché sur ce genre de problème... et je n'ai pas fini de le résoudre, j'ai même laissé tombé... mais je te laisse prendre la relève volontiers !

    Tiens, teste ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    function this = uiindexer(varargin)
    % UIINDEXER trace une serie de points et permets de recuperer l'index du point courant sur lequel on clique, en temps reel
    %
    %   Prend une serie de couples "propriete, valeur" en entree
    %  .----------------------------------------------.
    %  | A = uiindexer(prop1, val1, prop2, val2, ...) |
    %  '----------------------------------------------'
    %   Aucun ordre n'est necessaire pour la specification de ces couples.
    %
    % Proprietes (prop1, prop2, ...) disponibles avec valeurs a associer :
    %   
    %   'figure'   : handle de la figure *
    %   'axes'     : handle de l'axe (le parent de l'axe doit etre la figure) *
    %   'data'     : les donnees traitees, si possible sur une seule ligne ou une
    %                seule colonne
    %   'callback' : handle de la fonction a executer lorsqu'on change de point
    %                selectionne avec la souris sur le graphique
    %   'texte'    : handle de la fonction a executer qui doit retourner le
    %                texte a afficher. Exemple (si le uiindexer s'appelle A) :
    %                function txt = aTexte()
    %                    txt = {['Reel  : ', num2str(A.x())], ...
    %                           ['Imag  : ', num2str(A.y())], ...
    %                           ['Index : ', num2str(A.index())]};
    %                end
    %
    %   * si aucune figure n'est specifiee, ou que l'axe n'est pas dans la
    %     figure specifiee, alors une nouvelle figure est cree
    %
    % Accesseurs disponibles :
    %
    %   A.figure() : handle de la figure
    %   A.axes()   : handle de l'axe
    %   A.data()   : donnees stockées
    %   A.index()  : index courant
    %   A.x()      : abscisse du point courant
    %   A.y()      : ordonnee du point courant
    %
    % Methodes disponibles :
    %
    %   A.callback(@aCallback) : change la propriete 'callback'
    %   A.texte(@aTexte)       : change la propriete 'texte'
    %
    % Utilisation immediate dans le Command Window
    % --------------------------------------------
    %
    % A = uiindexer
    %
    % % Cliquer sur un point de la figure, et afficher l'index courant avec :
    %
    % A.index()
    %
    % Exemple simple a enregistrer dans test.m et a executer
    % ------------------------------------------------------
    %
    % function test
    %     A = uiindexer('data', [-5-5*i -4+4*i -3-3*i -2+2*i -1-i 0 1+i 2-2*i 3+3*i 4-4*i 5+5*i], 'callback', @monCallback);
    %     
    %     A.texte(@aTexte)
    %
    %     function txt = aTexte
    %         txt = {['Abscisse  : ', num2str(A.x())], ...
    %                ['Ordonnee  : ', num2str(A.y())], ...
    %                ['Index         : ', num2str(A.index())]};
    %     end
    % 
    %     function monCallback
    %         b = A.data();
    %         disp( [  'A('  ,  num2str(A.index())  ,  ') = '  ,  num2str(b(A.index()))  ] );
    %     end
    % end
     
    % MAJ 2012-02-16
     
        %% VARIABLES PRIVEES
        data = [];              % donnees a afficher
        index = 0;              % index courant
        old_index = 0;          % ancien index (limite les maj)
        f = [];                 % figure handle
        a = [];                 % axe handle
        callback = [];          % callback handle
        texte = [];             % texte a afficher handle
        x = 0;                  % abscisse courante
        y = 0;                  % ordonnee courante
        pos = 0;                % position courante (x,y,...)
        txt = 0;                % texte a afficher
     
        %% LISTE ACCESSEURS ET METHODES 
        %% ==> NE JAMAIS SUPPRIMER OU CHANGER LES 'PROPRIETES' (ajout autorise)
        %% ==> EVITER DE CHANGER LEURS FONCTIONS DANS LA CLASSE
        this = struct(...
            'figure',           @getFigureHandle, ...
            'axes',             @getAxesHandle, ...
            'data',             @getDataHandle, ...
            'index',            @getIndex, ...
            'x',                @getX, ...
            'y',                @getY, ...
            'callback',         @setCallbackHandle, ...
            'texte',            @setTexteHandle);
     
        %% CONSTRUCTEUR
        if mod(nargin, 2) == 1
            error('Mauvais format en entree : admet uniquement des couples (propriete, valeur)... tapez "help uiindexer" pour de plus amples informations.')
        else
            inputs = varargin;
            while length(inputs) >= 2
                prop = inputs{1};
                val  = inputs{2};
                inputs = inputs(3:end);
                switch lower(prop)
                    case 'figure'
                        f = val;
                    case 'axes'
                        a = val;
                    case 'data'
                        data = val;
                    case 'index'
                        disp('??? Warning ==> impossible to set "index" property')
                    case 'callback'
                        callback = val;
                    case 'texte'
                        texte = val;
                    otherwise
                        error(['The property "' num2str(prop) '" is not supported.'])
                end
            end
            if isempty(data)
                data = [-2-2*i 2+2*i -1+i 1+i 1-i -1-i];
            end
            if isempty(index)
                index = 3;
            end
            if isempty(f)
                f = figure;
            end
            if isempty(a)
                a = axes('parent', f);
            elseif get(a, 'parent') ~= f
                a = axes('parent', f)
            end
            plot(a, data, 'x');
            if isempty(callback)
                callback = 0;
            end
     
            % Configuration du curseur
            dcm_obj = datacursormode(f);
            set(dcm_obj, 'enable', 'on', ...
                'snaptodatavertex', 'on', ...
                'displaystyle', 'datatip', ...
                'UpdateFcn', @updateIndex);
     
        end
     
        %% ACCESSEURS
     
        function out = getFigureHandle()
            out = f;
        end
     
        function out = getAxesHandle()
            out = a;
        end
     
        function out = getDataHandle()
            out = data;
        end
     
        function out = getIndex()
            out = index;
        end
     
        function out = getX()
            out = x;
        end
     
        function out = getY()
            out = y;
        end
     
        %% METHODES
     
        function setCallbackHandle(in)
            callback = in;
        end
     
        function setTexteHandle(in)
            texte = in;
        end
     
        %% CONFIGURATION DU CALLBACK DU CURSEUR
     
        function txt = updateIndex(empt, event_obj)
            index = get(event_obj, 'DataIndex');
            if old_index ~= index
                pos = get(event_obj, 'Position');
                x = pos(1);
                y = pos(2);
                old_index = index;
                callback();
            end
            if isempty(texte)
                txt = {['Reel  : ', num2str(pos(1))], ...
                    ['Imag  : ', num2str(pos(2))], ...
                    ['Index : ', num2str(index)]};
            else
                txt = texte();
            end
        end
    end
    avec ça (ou sans, il marche très bien seul aussi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    % Pour plus d'information : help uiindexer
     
    % MAJ 2012-02-16
     
    function uiindexer_test
        f = figure;
        ax = axes('parent', f);
     
        A = uiindexer('figure', f, 'axes', ax, 'data', [-5-5*i -4+4*i -3-3*i -2+2*i -1-i 0 1+i 2-2*i 3+3*i 4-4*i 5+5*i], 'callback', @monCallback);
        A.texte(@aTexte)
     
        plot(ax, [-5-5*i -4+4*i -3-3*i -2+2*i -1-i 0 1+i 2-2*i 3+3*i 4-4*i 5+5*i], 'x');
     
        function txt = aTexte
            txt = {['Abscisse  : ', num2str(A.x())], ...
                   ['Ordonnee  : ', num2str(A.y())], ...
                   ['Index         : ', num2str(A.index())]};
        end
     
        function monCallback
            b = A.data();
            disp( [  'A('  ,  num2str(A.index())  ,  ') = '  ,  num2str(b(A.index()))  ] );
        end
    end
    Par contre, plus il y a de points, plus ça rame... Tu remarqueras si tu lis dans le détail que j'utilise datacursormode...

    Le premier fichier utilise la "pseudo-poo"...

    Bon courage, mais fais moi un retour, je suis prêt à t'aider, cette fonctionnalité m'intéresse beaucoup aussi (pas pour supprimer des lignes, mais uniquement pour effectuer du repérage en loi de commande de vol d'hélico, rien à voir... mdr )

    Cordialement,

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    salut tous

    merci beaucoup pour ces réponses !
    je pensais que ça aller être beaucoup plus simple que cela
    tu coup je vais jeter un coup d'oeil mais si je n'y arrive pas je vais procéder à la solution de facilité : "à taton"

    en tout cas si je trouve je vous dis

    A+

  5. #5
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Salut,

    Ne sois pas effrayé par ce que je t'ai filé... je te l'ai donné uniquement pour que tu testes rapidement. Après, si tu veux regarder dans le détail, les lignes dans le fichier qui vont t'intéresser concernent le datacursormode. J'ai mis le tout dans une sorte de boite qui s'utilise comme un objet de la programmation orientée objet pour me simplifier la vie. Cela peut paraître lourd mais en fait ça simplifie beaucoup la vie. Mais la classe a été mal codée... et ceci en grande partie parce que je n'ai pas compris comment fonctionnait le datacursormode (ou alors c'est que cette fonctionnalité est vraiment creuse et peu maniable). Mais au moins avec ces lignes de codes tu as un vrai exemple de son utilisation dans des cas concrets.

    Mais à refaire, si tu veux mon avis, je pense qu'il faudrait se démerder pour re-coder soi-même un autre "datacursormode" avec lequel on puisse dire sur quel axe on travaille exactement, qui soit rapide à l'exécution, etc... par contre, je ne sais pas comment faire. Si déjà on pouvait récupérer toutes les caractéristiques d'un axe et surtout ce qu'il contient, ce serait déjà une grosse avancée (perso je ne sais pas comment faire).

    Tiens nous au courant !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci tachmou pour les infos

    en fait je faisais ceci dans l'idée d'optimiser un code (en automatisant tout) mais comme il fonctionne très bien en l'état et que je n'ai pas beaucoup de temps pour finir mon projet je vais m'arreter ici je pense.

    ps: si jamais je me replonge dedans je te tiens au courant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2010] Supprimer les Actions par défaut sur une liste externe
    Par mrkinfo dans le forum SharePoint
    Réponses: 2
    Dernier message: 21/03/2013, 16h36
  2. Réponses: 3
    Dernier message: 30/01/2012, 14h42
  3. Réponses: 1
    Dernier message: 07/07/2010, 12h35
  4. VBA: Supprimer ligne commençant par un caractère donné
    Par urbanspike dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 18/01/2008, 13h03
  5. [VB6] Envoi d'un mail par clique sur un mot
    Par batmat86 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/03/2006, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo