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 :

Introduire une flèche sur un graphique


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Introduire une flèche sur un graphique
    salut à tous, j'aimerais introduire une flèche sur mon histogramme à une position précise, mais ça ne marche pas, j'aimerais à la position X=12 et Y=9, indiquer avec une flèche verticale et écrire à coté:" ici le sommet"
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    X = [5 8 12 7 1];
    Y=[3 4 9 5 2];
    bar(X,Y)
    annotation('textarrow',12,9,' ici le sommet')
    c'est un petit code, en fait je m'entraine un peu à utiliser les fonctions...
    quelqu´un aurait t-il une idée ? merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pense à bien consulter la documentation des fonctions que tu utilises (en tapant doc nom_de_la_fonction ; ou doc annotation ici).
    Citation Envoyé par doc annotation
    annotation('textarrow',x,y) creates a textarrow annotation object that extends from the point defined by x(1),y(1) to the point defined by x(2),y(2), specified in normalized figure units. The tail end of the arrow is attached to an editable text box.
    Tu peux donc voir qu'il faut spécifier deux vecteurs x et y de 2 valeurs spécifiant le début et la fin de la flèche.
    De plus ces coordonnées doivent être normalisées (la fonction dsxy2figxy mentionnée ici peut se révéler utile)
    Enfin le texte, se fixe de pair à l'aide de la propriété 'string'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [figx figy] = dsxy2figxy([x1 y1],[x2 y2]) % (x1,y1) ; (x2,y2) coordonnées début/fin de la flèche
    annotation('textarrow',figx ,figy, 'string',' ici le sommet')

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut erreur..
    merci pour la réponse, j'ai essayé mais j'obtiens une erreur,
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     X = [5 8 12 7 1];
    Y=[3 4 9 5 2];
    bar(X,Y)
    [figx figy] = dsxy2figxy([12 15],[12 9]);
    annotation('textarrow',figx ,figy, 'string',' ici le sommet')
    erreur:
     Error in annotation_position_fleche (line 4)
    [figx figy] = dsxy2figxy([12 15],[12 9]);
    pourquoi ça ne marche pas?

  4. #4
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Bonjour,
    en testant le même code que toi j'avais en effet une erreur, en regardant dans la doc j'ai vu que la fonction dsxy2figxy n'est pas disponible immédiatement dans matlab, il faut d'abord l'ajouter en exécutant la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addpath([docroot '/techdoc/creating_plots/examples']);
    Et normalement ça devrait marcher.

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    dsxy2figxy n'est pas une fonction qui est "de base" dans matlab (en tout cas dans ma version R2012a).

    En tapant dsxy2figxy dans l'aide matlab, on se rend compte que celle-ci est décrite dans la rubrique "Example - pinning text arrows and ellipses".
    You can position annotations in data space by transforming the data space coordinates to normalized figure coordinates. This example shows how to do this using a function called dsxy2figxy, which is a MATLAB file that accompanies this documentation. (It is not a MATLAB function.)
    la solution est simple :
    tape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addpath([docroot '/techdoc/creating_plots/examples'])
    dans le command window et tu auras la fonction dsxy2figxy dans le path de ta session matlab.

    Tu as également accès au code de cette fonction dans la rubrique d'aide que je t'ai indiquée plus haut.

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut ca ne marche pas
    ça ne marche toujours, j´obtient la même erreur:
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    X = [5 8 12 7 1];
    Y=[3 4 9 5 2];
    bar(X,Y)
    addpath([docroot '/techdoc/creating_plots/examples']);
    [figx figy] = dsxy2figxy([12 15],[12 9]);
    annotation('textarrow',figx ,figy, 'string',' ici le sommet')

  7. #7
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Fait également attention à ce que les coordonnées de ta flèche ne soient pas hors des limites des axes.
    Par exemple ici ton axe Y va jusqu'à 9 alors que ta flèche doit être au-dessus.
    Change les limites de l'axe Y et ça devrait aller mieux!

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut ??
    j´ai délimiter les axes de 0 à15,ca ne marche toujours pas, j´obtiens toujours une erreur au niveau de la commande: annotaion, quelqu´un pourrait avoir une autre idée?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Quelle erreur ?

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut erreur
    l´erreur:
    Error using annotation (line 122)
    X and Y values must be between 0 and 1
    
    Error in annotation_position_fleche (line 8)
    annotation('textarrow',figx ,figy, 'string',' ici le sommet')

  11. #11
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    C'est donc parce que ta flèche est en dehors des axes, comme je l'ai précisé dans mon message précédent. Cela crée donc des valeurs de figx et figy supérieures à 1, ce qui te génère ton erreur.

    Ce code fonctionne pour moi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    X = [5 8 12 7 1];
    Y=[3 4 9 5 2];
    bar(X,Y)
    addpath([docroot '/techdoc/creating_plots/examples']);
    ylim([0 15]);
    [figx figy] = dsxy2figxy([12 15],[12 9]);
    annotation('textarrow',figx ,figy, 'string',' ici le sommet')
    Il faut bien spécifier le ylim avant de calculer figx et figy.

  12. #12
    Invité
    Invité(e)
    Par défaut
    As-tu retenu la remarque de mokochan sur les limites des axes ?
    Citation Envoyé par mokochan Voir le message
    Fait également attention à ce que les coordonnées de ta flèche ne soient pas hors des limites des axes.
    Par exemple ici ton axe Y va jusqu'à 9 alors que ta flèche doit être au-dessus.
    Change les limites de l'axe Y et ça devrait aller mieux!

  13. #13
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut ca marche
    merci, ca marche

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut autre possibilité?
    salut,
    quelqu´un aurait il une autre possibilité,oú l´on n est pas obligé d´utiliser la fonction: dsxy2figxy, car celle ci n´est directement pas sur Matlab et ca fait un peu un long chemin, je pense, ya t il peut etre un plus court chemin pour pouvoir introduire une flèche?
    merci

  15. #15
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Bonjour,
    je ne connais pas d'autre fonction, mais si tu ne veux pas utiliser celle-là tu peux toujours coder ta propre fonction?
    Il suffit de faire une fonction qui transforme des coordonnées en pourcentage par rapport à la taille de tes axes, cela doit être faisable assez facilement.

  16. #16
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    j´ai fait une flèche comme ceci( c´est juste un exemple), ça marche aussi, mais j´aimerais savoir s´il y a un moyen de définir la longueur et l´épaisseur de la flèche, pour qu´elle soit un peu plus visible, mais toutefois en combinant avec la fonction 'text'
    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    X = [5 8 12 7 1];
    Y=[3 4 9 5 2];
    bar(X,Y);
    text(0,5,'\leftarrow exemple','FontSize',14)

  17. #17
    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
    Bonjour,

    Tu ne peux pas modifier les dimensions de ta flèche, car c'est du texte comme tu as fait.

    Par contre, comme l'a dit Mokochan, tu peux coder ta propre fonction qui dessine une flèche comme tu le souhaites (avec en entrée les paramètres de ta flèche).

    Une fois que c'est fait, tu codes une fonction qui se chargera d'afficher un commentaire avec une flèche.

    C'est un très bon exercice pour apprendre à maîtriser matlab. L'avantage est que tu pourras réutiliser ces fonctions plus tard si tu le souhaites. Malgré tout, l'intérêt reste tout de même limité, et la première fonction que tu avais utilisée ou celle que tu viens d'utiliser sont peut-être suffisantes ?

    Cordialement,
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  18. #18
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    merci pour la réponse, en fait ca devrait bien suffir ces 2 fonctions...

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

Discussions similaires

  1. Afficher une valeur sur un graphique
    Par kingtronik dans le forum MATLAB
    Réponses: 3
    Dernier message: 22/07/2008, 15h06
  2. [Débutant] Positionner une image sur un graphique
    Par matlabeginer dans le forum Images
    Réponses: 2
    Dernier message: 08/04/2008, 13h05
  3. [BO XI R2] Ajouter une valeur sur un graphique
    Par LP-mpascolo dans le forum Deski
    Réponses: 4
    Dernier message: 11/03/2008, 18h59
  4. addition d'une série sur un graphique par formule
    Par 20100. dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/01/2008, 16h13
  5. Tracer une ligne sur un graphique ACCESS
    Par taisherg dans le forum Access
    Réponses: 1
    Dernier message: 21/05/2007, 16h26

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