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 :

probleme avec quiver (et utilisation de line) [Débutant]


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 probleme avec quiver (et utilisation de line)
    bonjour tous,

    j'ai un petit soucis de tracé avec la fonction "quiver", je m'explique :

    - j'ai fais un petit exemple sur un cas qui m’intéresse et le programme marche très bien : j'ai des barres verticales superposées à ma courbe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    x=linspace(0,100,10);
    y=linspace(0,50,10);
    y=y+10*cos(x).*sin(x);
    figure (1)
    plot(x,y,'-o')
    hold on
    quiver(x(2:2:4),y(2:2:4),[0 0],[10 10],'linewidth',10)
    Le soucis est que lorsque je fais ceci dans mon programme réel ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for p=1:1:L
    figure (p)
    hold on
    plot(X{p,2}(:),X{p,1}(:),'-or'); %courbe
    hold on
    abscQuiver=zeros(1,length(X{p,6}(:)));
    quiver(X{p,2}(:),X{p,1}(:),abscQuiver',X{p,6}(:),'linewidth',5) %quiver superposés
    end
    Si je compile ce code j'ai bien mes barres verticales d'amplitude X{p,6}(:) mais par contre j'ai des barres horizontales très grandes qui apparaissent (cf. PJ) et je ne vois pas comment corriger ceci ...

    j’espère que vous pourrez m'aider (et m'expliquer mon erreur car je ne comprends pas)

  2. #2
    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
    comme quiver me fait des barres horizontales et que je n'arrive pas à le modifier connaitriez vous une autre methode pour superposer à mon graphique des barres verticales d'amplitude "Ai" à partir de points existants "(Xi,Yi)" ?

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Pourrais-tu nous fournir un jeu de données réduites pour la variable X ?

  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
    voici le jeux de donnée complet en PJ (la variable ne s'appel pas X)

    (merci beaucoup pour ton aide)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Salut 21Did,

    Es-tu sur que ton problème ne vient tout simplement pas de la représentation graphique ?
    J'entends par là une disproportion entre ton axe des abcisses et celui des ordonnées ?

    Essaye ca sur tes graphes et tu devrais obtenir de belles flèches :

    ou pour obtenir la pièce jointe, une combinaison des propriétés d'axes et de daspect

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    axis square
    daspect([1 1 1])
    En espérant avoir répondu à ta question ;-)
    Images attachées Images attachées  

  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
    Citation Envoyé par Merel Voir le message
    Salut 21Did,
    Es-tu sur que ton problème ne vient tout simplement pas de la représentation graphique ?
    J'entends par là une disproportion entre ton axe des abcisses et celui des ordonnées ?
    Essaye ca sur tes graphes et tu devrais obtenir de belles flèches :
    ou pour obtenir la pièce jointe, une combinaison des propriétés d'axes et de daspect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    axis square
    daspect([1 1 1])
    En espérant avoir répondu à ta question ;-)
    Salut Merel !

    oui tout à fait j'ai des axes en abscisses qui contiennent des valeurs petites et des axes en ordonnées des données grandes.

    donc si j'ai bien compris ça viendrai d'ici le probleme ? (je n'ai pas trop compris pourquoi par contre...?)

    dès que j'ai matlab sous la main je testerai ce que tu m'a dis. Peut etre que si je laisse l'épaisseur par défaut du trait de "quiver" ça ne m'engendrera pas de probleme aussi ?

    merci beaucoup pour ton aide

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Je pense que ca viendrait de là. Après que tu changes l'épaisseur de ta flèche ou non ne changera rien au problème.

    Tu as juste la partie horizontale de ta flèche qui a en gros une longueur de 4.8 en abscisse sur une représentation totale de 5. Soit en gros 96% de ton axe des abscisses ! D'où l'impression d'avoir des flèches immenses.

    Ta résolution actuelle va de -2.5 à 2.5. Si tu changes cette résolution en l'augmentant, par exemple -50 à 50, tu auras toujours la partie horizontale de ta flèche qui fera 4.8 en longueur mais sur une représentation totale de 100. ^_^ Ta flèche ne représente plus que 4.8% de ton axe.

    En espérant que ca soit plus clair !

  8. #8
    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
    je comprends ce que tu veux dire sauf ceci :

    Citation Envoyé par Merel Voir le message
    Tu as juste la partie horizontale de ta flèche qui a en gros une longueur de 4.8 en abscisse
    car la composante horozontale de mon quiver est nulle puisque je lui est mis une composante horizontale = 0. Du coup, je ne vois pas trop ce que tu veux dire par "longueur horizontale de la fleche". La seule partie horizontale que je vois est celle liée à l'épaisseur ...?

    => peut etre que le mieux serait de faire exactement la même chose mais sans des flêches, le probleme est que je ne vois pas trop comment faire... j'ai essayé avec la commande "bar" mais mes barres ne commence pas à une ordonnée déterminée mais à 0 ...

    ps: je pourrais tester tout ceci que ce soir...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Je me suis mal exprimé, on ne parle pas de la même chose.

    Ton quiver a bien une composante verticale et une composante horizontale. Ta composante horizontale est nulle => la flèche pointe vers le bas ou vers le haut.

    ce que j'entends pas horizontal, c'est la pointe de ta flèche.


    Mais si tu veux juste des lignes, pourquoi ne pas tout simplement utiliser line ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    load('X.mat')
     
    L=7
     
    for p=1%:L
    figure (p)
    hold on
    plot(X{p,2}(:),X{p,1}(:),'-or'); %courbe
    hold on
     
    line([X{p,2}(1) X{p,2}(1)],[X{p,1}(1) X{p,6}(1)])
    line([X{p,2}(2) X{p,2}(2)],[X{p,1}(2) X{p,6}(2)])
     
    end
    C'est l'idée générale. a toi ensuite de l'adapter à ce que tu souhaites
    Images attachées Images attachées  

  10. #10
    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
    mince alors, je n'avais pas pensé à "line" !

    => c'est exactemement ceci qu'il me faut ! merci Merel, je vais utiliser Line

    EDIT :

    ça marche super bien sur mon exemple avec ce code :

    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
     
    clear all
    close all
    clc
    x=linspace(0,100,10);
    y=linspace(0,50,10);
    y=y+10*cos(x).*sin(x);
     
    figure (1)
    plot(x,y,'-o')
    hold on
    %% avec Quiver marche bien mais la visualisation peut être nulle si echelle
    %très différente
    % quiver(x(2:2:4),y(2:2:4),[0 0],[10 10],'linewidth',10)
    %% line marche super bien
    %exemple simple pour comprendre
    % line([x(4) x(4)],[y(4) y(4)+10],'color','r')
    % line([x(6) x(6)],[y(6) y(6)+10],'color','g')
    %-------------cas général------------------
    for i=1:1:10
        vectorColor=['r' 'g' 'b' 'm' 'y' 'g' 'r' 'g' 'b' 'm' 'y' 'g'];
        line([x(i) x(i)],[y(i) y(i)+10],'color',vectorColor(i))
    end

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

Discussions similaires

  1. Problème avec l'utilisation de grep
    Par fgalves dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 08/11/2006, 00h49
  2. Java Probleme avec line.trim().split("\t");
    Par benzh dans le forum Langage
    Réponses: 6
    Dernier message: 02/08/2006, 05h18
  3. Problème avec l'utilisation de la commande system awk
    Par vbcasimir dans le forum Linux
    Réponses: 3
    Dernier message: 05/10/2004, 17h18

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