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 de colorbar


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 16
    Points : 11
    Points
    11
    Par défaut probleme de colorbar
    Bonjour,

    voici un petit post pour quelques soucis sur une fonction et recevoir vos avis sur ma methode:

    idee: je dois creer une fonction a partir d'une base de donnees afin de tracer la trajectoire de bouees et visualiser en meme temps sur cette trajectoire les annees (en fonction de sa position)

    donnees: je dispose de fichier .mat me donnant l'identificatif de la bouee (id), sa position GPS (lat, lon), son annee (year). Chaque fichier est ordonnance de la maniere suivante:

    fichier year.mat fichier id.mat etc...

    1 1988 1 0001
    ... ...
    n 2009 n 201

    Etant donne que chaque bouee est a la suite de l'autre, il m'a donc fallu dans un premier temps les differencier, c'est a dire distinguer le rang de debut d'une bouee (startb) et fin de bouee (endb).

    Ma fonction est la suivante:

    fonction...
    chargement des donnees

    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
    n=100000;      %nbre de donnes
    var2=input('\n From which data do you want to start? \n');
    i=var2;
    k=var2;
    ref(i)=1;
    endb(i)=1;
    while k<=n
        ref(i)=id(k);
        while id(k)==ref(i) && k<=n
            k=k+1;
        end
        endb(i)=k-1;
        i=i+1;
        startb(i)=k;
    end
    nb=abs(i-var2);
    Ici, je connais desormais le rang (ligne) de debut d'une bouee (startb) et de fin d'une bouee (endb), ainsi que le nombre de bouee (nb), inconnu jusque la . Maintenant, je cherche a tracer mes courbes et visualiser l'annee par une couleur:

    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
    for i=1:1:nb
       yearb=[ ];
       figure(i)
       plot(longcoast (),coastline(:,2),'k-','LineWidth',1) 
       %cela correspond a une map chargee
    
       axis([-180,-70,0,60])
       grid
       xlabel('Longitude')
       ylabel('Latitude')
       title(['Trajectory with years of the buoy id number',num2str(id(startb(i+var2-1)))])
       % (i+var2-1) correspond au rang de la bouee 1
       hold on
       latb=lat(startb(i-1+var2):1:endb(i-1+var2));
       lonb=lon(startb(i-1+var2):1:endb(i-1+var2));
       yearb=year(startb(i-1+var2):1:endb(i-1+var2));
       minyear=min(yearb);
       maxyear=max(yearb);
       v=endb(i-1+var2)-startb(i-1+var2)+1;
       Y=rand(v,1);
       for s=1 :1 :v
         Y(s, :)=year(startb(i-1+var2)+s-1);
       end
       scatter(lonb(),latb(),10,Y)
       %ici je trace mes courbes de trajectoire avec des couleurs associees aux annees
       colormap(hsv(maxyear-minyear+1));
       %je cherche a obtenir autant de couleur qu'il y a d'annee durant le parcours de ma bouee
       axis([minyear maxyear])
       %je souhaite obtenir une echelle de colorbar graduee avec mes annees
       colorbar;
       title('years')
       %titre de ma colorbar
    Mais helas, je n'arrive pas a avoir ,d'une part, les bons max et min. En effet, on me ressort des valeurs comme 26, 25.5,etc... alors que je m'attendais plus a 1988,...
    D'autre part, et en consequence du premier, le nbre de couleur egale au nbre d'annee sur une trajectoire 'lambda'.
    Enfin, mon titre 'years' vient remplacer mon titre 'trajectory...' alors que je souhaite le faire apparaitre au dessus de ma colorbar.

    Pourtant, a l'origine, ma fin de script pour cette partie etait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      scatter(lonb(),latb(),10,Y)
      colormap(hsv(20));
      c2=colorbar;
      axes(c2);
      title('years')
    je n'avais pas les bonnes graduations et j'imposais un nbre de couleur mais mon titre apparaissait au dessus de ma colorbar.

    Je sais pertinnement que ce n'est pas chose evidente de se pencher sur le script d'une tierce personne mais etant tout jeune utilisateur de matlab, et bien qu'ayant cherche dans l'help ou sur plusieurs forums matlab'ique', je n'ai trouve aucune reponse. Et donc, un petit regard exterieur me ferait du bien (et oui, a force de chercher je ressemble a ce dernier smiley).

    Merci d'avance

  2. #2
    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,

    si tu pouvais déjà suivre les conseils du forum pour poster ton message, ca nous aiderait. Là, c'est un peu incompréhensible et ca ne donne pas envie de tout lire (ce que j'ai tout de même fait...)

    Indente ton code, utilise les balises code et ca sera déjà plus clair...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Bonjou Merel,

    J'ai bien pris en compte tes remarques et je m'excuse pour la presentation de mon post (il a ete corrige par l'equipe de moderation du forum), j'y ferai attention.
    Effectivement, il n'est pas evident de lire mon code car il est issue d'une reflexion personnelle sur la maniere d'aborder mon etude. Je voulais vous faire part de l'integralite des elements que je possedais afin que vous puissez, tant bien que mal je l'avoue, suivre mon raisonnement.

    Mon probleme est donc dans la deuxieme partie de code, apres avoir determine le rang de debut d'une bouee et de fin d'une bouee, au niveau de ma colorbar. Les valeurs max et min de mon vecteur yearb sont incorrectes, peut etre du a la fonction preexistante de matlab year().
    Ensuite, je ne comprends pas pourquoi, lorsque j'ecris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    colormap(hsv(maxyear-minyear+1));
    axis([minyear maxyear])
    colorbar;
    title('years')
    mon titre vient se superposer au titre general de mon graphe.

    Je me tiens a votre entiere disposition pour vos questions et/ou observations sur ce script. Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 163
    Points
    53 163
    Par défaut
    Pour le problème de titre sur l'échelle de couleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      scatter(lonb(),latb(),10,Y)
      colormap(hsv(20));
      c2=colorbar;
      title(c2,'years')
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Merci Dut, ca c'est regle grace a toi

    Il me reste plus qu'a trouver ce probleme de max et min, et je pourrais enfin adapter l'echelle de ma colorbar a mes annees.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Salut,

    Tout d'abord évite de nommer une de tes variables avec le nom d'une fonction, tu l'as dit toi même, cela peut être source de problème. Tu as regardé si ta variable year contient les bonnes années?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Merci Magelan,

    Tout d'abord pour avoir corrigé mon post et ensuite tu m'as mis sur une piste:


    1. J'ai commencé par renommer ma base de données "year.mat" en "lambda.mat" afin de voir s'il n'y avait pas conflit entre la fonction year de matlab et ma base de donnée. Observation sur le script: aucun changement.

    2. Par conséquent, j'ai créé une boucle 'for' de 1 à 10 afin de voir ce que contenait mon vecteur comme tu me l'avais suggéré, chose étonnante, matlab m'a ressorti que des valeurs nulles, ah ah... je tiens une piste!! Il s'avère souvent dans ce genre de cas, d'un problème d'initialisation de mon vecteur "year". Bingo!!! J'ai donc écrit en début de script:

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      j=1;
      year(j)=1;
         for i=1:1:nb
              figure(i)
              etc...
         end
      Ca marche!! enfin presque.... donc pour les figures 2 à la dernière, j'ai ainsi pu associer les couleurs de début et de fin de ma colorbar aux années min et max de la trajectoire de ma bouée.

    3. Il me reste désormais à effectuer une initialisation correcte car pour le premier graphe (figure 1), matlab me ressort comme valeur de l'année min, la valeur 1, valeur donnée à l'initialisation.


    "Bah change avec l'année qui t'interesse" oui mais cela dépend du rang auquel veut partir l'utilisateur. Je m'explique par un exemple:

    Je posséde 100 000 données, mais je veux travailler entre la 50 000ième ligne (= var2) et la fin (= n =100 000). Dans cette tranche, j'ai x bouées donc x trajectoires. Et donc pour la première bouée parmis ces x, elle s'est déplacé entre les années y et z. En gros, mon initialisation serait "year(j)=year(ligne de la première bouée de la tranche=var2)". C'est à dire qu'il semblerait initialiser "year" par "year" . Bref, je me mords la queue

    Mais bon, j'ai l'idée, il ne me reste plus qu'à prendre un peu de recul et à l'exprimer sur mon script

    Nota / Remarque: je peux affirmer, pour les interessés, qu'il n'y a pas de probléme pour matlab dans l'interprétation d'une base de donnée nommée "year" et ainsi le vecteur colonne associé, et la fonction de matlab "year()". Bien sur, après test de ma part.


    Je tiens enfin à vous remercier sincérement une nouvelle fois pour vos remarques et observations qui m'ont aidé à avancer dans mon script.



    "Un petit pas en matlab, un grand pas pour rom3478"

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 163
    Points
    53 163
    Par défaut
    Citation Envoyé par rom3478 Voir le message
    Nota / Remarque: je peux affirmer, pour les interessés, qu'il n'y a pas de probléme pour matlab dans l'interprétation d'une base de donnée nommée "year" et ainsi le vecteur colonne associé, et la fonction de matlab "year()". Bien sur, après test de ma part.
    Seulement si tu ne comptes pas utiliser la fonction YEAR par la suite dans ton code...

    L'exemple classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    A = rand(1,5);
     
    min = 0; % Initialisation d'une variable min
     
    min = min(A); % Recherche de minimum avec la fonction MIN
    Ce qui donne à l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Subscript indices must either be real positive integers or logicals.
    Car MATLAB pense que min(A) fait référence au vecteur (1x1) définit juste avant et non pas à un appel à la fonction MIN

    Il est donc (fortement) recommandé de ne pas nommer les variables comme les fonctions MATLAB
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Mon problème d'initialisation a été résolu. Bon, je l'avais mis de coté, c'est vrai... Mais bon en posant une question dans un autre post sur un autre problème lors du chargement de mes données, j'ai trouvé la façon exacte d'initialiser mon vecteur. Tout simplement, en chargeant par un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    load('mesdonnes.mat','mesdonnees')
    c'est à dire en indiquant dans mon fichier .mat, la variable dont j'ai besoin (et ce meme si ce fichier ne comprend que cette variable, peut etre pour lui assigner un nom dans la fonction, je ne sais pas trop)

    Merci à tous pour vos réponses, je retourne dans mon matlab

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

Discussions similaires

  1. probleme colorbar echelle
    Par barney2008 dans le forum MATLAB
    Réponses: 2
    Dernier message: 09/07/2009, 04h31
  2. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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