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 :

Colorbar et datacursor [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Par défaut Colorbar et datacursor
    Re bonjour,

    je vous explique les deux paramètres que j'aimerais ajouté au programme ci-dessous.
    Pour replacer le problème dans son contexte j'ai une fenêtre qui affiche pour une position gps (latitude longitude) un niveau d'intensité (représenté en couleur).
    Le programme fonctionne parfaitement mais j'aimerais ajouté deux choses :
    - (1) mettre une échelle de couleur sur le coté, correspondant au niveau d'intensité (Lpow) crée dans la boucle modélisant la figure.
    - (2) afficher en plus des coordonnées gps le niveau d'intensité (Lpow) lorsque l'on clique sur un point avec le datacursor.

    Avez-vous des indications à me donner, j'ai essayé d'utiliser colormap et colorbar mais sans succès.

    Voici le code en question :

    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
     
    clear all ;
    close all ;
     
    % Ouverture du fichier
    filename='Trajet_00647757743044269898.XLS';
     
    Apneu=68.2587;
    Bpneu=34.1715;
    Amot=48.9952;
    Bmot=34.0052;
    Vref=50;
    RPMref=1000;
     
     
    % lecture feuille 1
    num = xlsread(filename,'Feuil1');
    temps1=num(:,1); % horloge
    rpm=num(:,2); % régime moteur
    v=num(:,3); % vitesse en km/h
    dist1=num(:,8); 
    n1=length(v); % longueur des vecteurs
     
    % lecture feuille 2
    num2=xlsread(filename,'Feuil2');
    longitude=num2(:,10); % longitude
    latitude=num2(:,16); % latitude
    dist2=num2(:,19); 
    temps2=num2(:,1); % horloge gps
    n2=length(temps2); % longueur des vecteurs
    n3=temps2(end); % dernière valeur du vecteur thorloge gps
     
     
     
     
    % Synchronisation des deux échelles de temps
    temps3 = nan(size(temps2)); % initialisation du nouveau vecteur de même taille que t2 avec des valeurs NaN
    for ii=1:numel(temps2)% pour chaque valeur de t2
       [~,idx] = min(abs(temps1-temps2(ii)));% recherche de l'index dans t1 de la valeur de t1 la plus proche de t2(ii)
       temps3(ii) = temps1(idx); % stockage dans t3 de la valeur trouvée
       rpm2(ii)=rpm(idx); 
       v2(ii)=v(idx);
    end
     
    % Recomposition du niveau de puissance
    for i=1:n2
        Lmot(i)=Amot+Bmot*log10(rpm2(i)/RPMref);  %composante bruit moteur
        Lpneu(i)=Apneu+Bpneu*log10(v2(i)/Vref); % composante pneu
        L(i)=dbsum(Lmot(i),Lpneu(i)); % bruit total
        Lpow(i)=L(i)+25.6; % niveau de puissance
    end
     
    % Echelle de couleur_à peaufiner
    for i=1:n2;
     
    if Lpow(i)<80
    color(i) = 0.1; % if all z are >0
    elseif Lpow(i)>80 && Lpow(i)<90
    color(i)=0.5;
    else color(i)=0.9;
    end
     
    end
     
     
     
    % Affichage des courbes
    figure(1)
    hold on,
    for i=1:n2
    plot(longitude(i),latitude(i),'.','Color',[color(i) 1-color(i) 1-color(i)])% plan gps du parcours
    title('Niveau de puissance Lw du véhicule=f(Position sur le circuit)')
    xlabel('Longitude(°)')
    ylabel('Latitude(°)')
    end
    Merci à vous.

  2. #2
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Salut,
    une autre façon de dessiner des couleurs en 2D est pcolor, et dans ce cas tu peux utiliser colorbar.
    Pour la seconde question, regarde ce que fait datacursormode, en particulier l'argument 'UpdateFcn'. Tu choisis ainsi le texte qui apparaît lorsque tu cliques sur tes points.

  3. #3
    Membre averti
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Par défaut
    Aurais-tu une idée pour utiliser pcolor dans mon programme ?

  4. #4
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    En supposant que tu as une information de puissance pour chaque point de longitude, lattitude, tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [longitudeGrid latitudeGrid] = meshgrid(longitude,latitude);
    pcolor(longitudeGrid,latitudeGrid,Lpow);
    Mais en relisant ton code j'imagine que tu n'as l'information que le long d'un tracé, donc je pense qu'en fait tu pourras pleinement utiliser ce qui est décrit ici:
    http://matlab.developpez.com/faq/?pa...line_color_var

  5. #5
    Membre averti
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Par défaut
    merci pour ta réponse.
    j'ai suivi ton conseil et utilisé la FAQ de matlab.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    figure(1)
    hold on,
     
    patch('XData',[nan;longitude(:);nan],...
          'YData',[nan;latitude(:);nan],...
          'CData',[nan;Lpow(:);nan],...
          'FaceColor','interp', ...
          'EdgeColor','interp')
    colorbar('ylabel',Lpow(:),'location','EastOutside')
        title('Niveau de puissance Lw du véhicule=f(Position sur le circuit)')
    xlabel('Longitude(°)')
    ylabel('Latitude(°)')
    mais le programme a apparemment une erreur lorsque je veux visualiser directement la colorbar.

    J'aimerais aussi que chaque point apparaisse en '.' et non en '-' sur la figure mais je ne sais pas ou rajouter cette option dans le patch.

  6. #6
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Salut,
    il est plus difficile sous matlab de tracer une courbe en dégradé de couleur, que par points : la méthode scatter fait ça très bien. Le colorbar est de plus compatible avec cette méthode.
    Si tu as une erreur, post le message entier pour que l'on puisse diagnostiquer.

  7. #7
    Membre averti
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Par défaut
    Citation Envoyé par FLB Voir le message
    tu n'as l'information que le long d'un tracé

    C'est exact je n'ai des données que le long du parcours. J'ai donc tester ta solution du patch. Mais j'aimerais conservé mes données avec un visuel de nuage de points. Ce qui n'est pas le cas avec le patch. d'autre part lorsque je souhaite insérer la colorbar. Il y a une erreur apparement dans mon code pour utiliser la colorbar.


    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
     
     
    clear all ;
    close all ;
     
    % Ouverture du fichier
    filename='Trajet_08554752408380562758.XLS';
     
     
    % lecture feuille 1
    num = xlsread(filename,'Feuil1');
    temps1=num(:,1); % horloge
    rpm=num(:,2); % régime moteur
    v=num(:,3); % vitesse en km/h
    dist1=num(:,8); 
    n1=length(v); % longueur des vecteurs
     
    % lecture feuille 2
    num2=xlsread(filename,'Feuil2');
    longitude=num2(:,10); % longitude
    latitude=num2(:,16); % latitude
    dist2=num2(:,19); 
    temps2=num2(:,1); % horloge gps
    n2=length(temps2); % longueur des vecteurs
    n3=temps2(end); % dernière valeur du vecteur thorloge gps
     
     
     
     
    % Synchronisation des deux échelles de temps
    temps3 = nan(size(temps2)); % initialisation du nouveau vecteur de même taille que t2 avec des valeurs NaN
    for ii=1:numel(temps2)% pour chaque valeur de t2
       [~,idx] = min(abs(temps1-temps2(ii)));% recherche de l'index dans t1 de la valeur de t1 la plus proche de t2(ii)
       temps3(ii) = temps1(idx); % stockage dans t3 de la valeur trouvée
       rpm2(ii)=rpm(idx); 
       v2(ii)=v(idx);
    end
     
    % Recomposition du niveau de puissance
    for i=1:n2
        Lmot(i)=Amot+Bmot*log10(rpm2(i)/RPMref);  %composante bruit moteur
        Lpneu(i)=Apneu+Bpneu*log10(v2(i)/Vref); % composante pneu
        L(i)=dbsum(Lmot(i),Lpneu(i)); % bruit total
        Lpow(i)=L(i)+25.6; % niveau de puissance
    end
     
    % Echelle de couleur_à peaufiner
    for i=1:n2;
     
    if Lpow(i)<80
    color(i) = 0.1; 
    elseif Lpow(i)>80 && Lpow(i)<90
    color(i)=0.5;
    else color(i)=0.9;
    end
     
    end
     
     
     
    % Affichage des courbes
    figure(1)
    hold on,
     
    patch('XData',[nan;longitude(:);nan],...
          'YData',[nan;latitude(:);nan],...
          'CData',[nan;Lpow(:);nan],...
          'FaceColor','interp', ...
          'EdgeColor','interp')
    colorbar('ylabel','location','EastOutside')
    title('Niveau de puissance Lw du véhicule=f(Position sur le circuit)')
    xlabel('Longitude(°)')
    ylabel('Latitude(°)')

  8. #8
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Salut,
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    figure(1)
    hold on,
    myMap = colormap;
    scatter(longitude(:),latitude(:),myMap(round(Lpow(:)/max(Lpow(:))*(size(myMap ,1)-1))+1,:));
    colorbar('location','EastOutside')
    title('Niveau de puissance Lw du véhicule=f(Position sur le circuit)')
    xlabel('Longitude(°)')
    ylabel('Latitude(°)')

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

Discussions similaires

  1. Légende d'une colorbar
    Par kevinl dans le forum MATLAB
    Réponses: 4
    Dernier message: 15/06/2007, 13h00
  2. Réponses: 2
    Dernier message: 14/06/2007, 11h47
  3. Valeurs extrêmes d'une colorbar
    Par paulines dans le forum MATLAB
    Réponses: 1
    Dernier message: 12/06/2007, 10h04
  4. Colormap/colorbar avec échelle logarithmique
    Par florence.g dans le forum MATLAB
    Réponses: 1
    Dernier message: 28/03/2007, 13h19
  5. Colorbar en échelle logarithmique
    Par suzanneMF dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/02/2007, 09h27

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