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 :

Superposer deux tracés avec deux colorbar différentes


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut Superposer deux tracés avec deux colorbar différentes
    Bonjour,

    Dans la continuité de cette discussion, je souhaiterais savoir si il est possible de superposer 2 plots sur la même figure et d'afficher les 2 colorbar correspondantes ?

    Voici un exemple de code reproductible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    figure;
    load mandrill
    image(X)
    colorbar
    x = linspace(1*pi,200);
    y = x + 1;
    hold on
    scatter(x,y)
    colorbar
    La première colorbar est remplacée par la 2ème.
    Je souhaiterais qu'elles soient affichées côte à côte...
    Mes recherches sur le forum sont infructueuses...

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    y a freezecolor qui marche pas mal en général

    sinon pour avoir les deux barres, je pense qu'il va falloir se le taper à la main
    prend quand même soin de vérifier que matlab central que quelqu'un ne l'a pas déjà fait/publier
    un bout de code pour commencer :

  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 317
    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 317
    Par défaut
    Il est clair que ça risque vite de tendre vers la bidouille :

    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
    figure
    load mandrill
    image(X)
    ax(1) = gca; 
    c(1) = colorbar;
     
    ax(2) = axes;
    uistack(ax(2),'top')
    x = linspace(1*pi,200);
    y = x + 1;
    scatter(x,y,10,rand(1,100)*10)
    c(2) = colorbar;
    set(c(2),'position',get(c(1),'position')+[0.1 0 0 0])
    set(ax(2),'units',get(ax(1),'units'),'position',get(ax(1),'position'),'color','none','ydir','reverse','xtick',[],'ytick',[], ...
        'xlim', get(ax(1),'xlim'), 'ylim', get(ax(1),'ylim'))
    Par contre, comment fais-tu pour distinguer les différentes valeurs avec les deux mêmes palettes de couleurs ?

  4. #4
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut
    Merci pour vos conseils. J'ai opté pour l'utilisation de subplot.
    Voici le résultat que j'obtiens pour le moment.
    Nom : Temp_38_131_scale.png
Affichages : 1057
Taille : 75,6 Ko
    Je n'arrive toutefois pas à gérer une palette de couleurs par subplot.
    Le code utilisé est le suivant :
    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
     
       figure
       subplot(1,20,1:17)
       image(...)
       colormap(flipud(gray))
       h=colorbar;
       ylabel(h, 'Sv (dB)');
       freezeColors;
     
       for i=1:step:length(temp)
           scatter(temp)             
       end
     
       subplot(1,20,19:20);
       image(1,[min(temp):0.1:max(temp],[min(temp_hydro):0.1:max(temp_hydro)]','CDataMapping','scaled');
       set(gca,'xtick',[]);            
       colormap(jet);

  5. #5
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    Citation Envoyé par habasque Voir le message
    Je n'arrive toutefois pas à gérer une palette de couleurs par subplot.
    freezecolor te permet de le faire très facilement

  6. #6
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut
    Oui j'ai bien essayé d'ajouter freezeColors après scatter mais j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Error using patch
    FaceVertexCData must be an Mx1 vector (indexed colors) or Mx3 matrix (RGB colors)
     
    Error in specgraph.scattergroup/refresh (line 169)
            p = patch('Parent',double(this),...
     
    Error in specgraph.scattergroup/schema>LdoDirtyAction (line 145)
      refresh(h);
     
    Warning: Error occurred while evaluating listener callback. 
    > In specgraph.scattergroup.schema>LdoMarkDirtyAction at 139
      In freezeColors at 157

  7. #7
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut
    En fait l'image est construite à partir d'une matrice. Il ne s'agit pas d'une image qui sert de fond.
    Donc je ne suis pas certain que ind2rgb s'applique dans le cas présent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     image(index ,depth ,Data_values',...
                'CDataMapping','scaled');

  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 317
    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 317
    Par défaut
    Tu peux toujours faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Data_values_RGB = (Data_values.' - min(Data_values(:)))/(max(Data_values(:))-min(Data_values(:)));
    Data_values_RGB = cat(3,Data_values_RGB,Data_values_RGB,Data_values_RGB);
     
    image(index ,depth ,Data_values_RGB,...
                'CDataMapping','direct');
    Ce n'est ni plus ni moins ce que fait implicitement MATLAB avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    image(index ,depth ,Data_values,...
                'CDataMapping','scaled');
    Après tu peux faire quelque chose comme ceci :

    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
    load mandrill
     
    figure
     
    subplot(1,20,1:17)
    image(cat(3,uint8(X),uint8(X),uint8(X)))
    axis image
    hold on
     
    scatter(rand(1,50)*500,rand(1,50)*480,10,rand(1,50)*500)
     
    c(1) = colorbar;
    c(2) = copyobj(c(1),gcf);
     
    set(c(2),'position',get(c(1),'position')+[0.12 0 0 0])
     
    set(c(1),'ylim',[1 64],'xlim',[0 1])
    cim = get(c(1),'children');
    gr = uint8(gray(64)*255);
    set(cim,'ydata',[1 64],'cdata',cat(3,gr,gr,gr),'cdatamapping','scaled')
    Tu trouveras des informations utiles ici : Gestion des couleurs par MATLAB
    Images attachées Images attachées  

  9. #9
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut
    Merci.
    En fait je souhaite avoir la main sur la palette de gris.
    J'utilise donc le code suivant :

    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
     
     
    figure
    subplot(1,20,1:17)
    image(index ,depth ,Data_values','CDataMapping','scaled');
    caxis([-85 -55]);
    colormap(flipud(gray))
     
    c(1) = colorbar;
    c(2) = copyobj(c(1),gcf);
     
    hold on
     
    for i=1:5:length(temperature)
        ind_coul= floor(abs(temperature(i)-min(temperature))*(size(jet,1)-1)/(max(abs(temperature))-min(temperature)));
        scatter(esu(i),profondeur(i),15+(ind_coul+1),jet(ind_coul+1,:),'filled')
    end
     
    set(c(2),'position',get(c(1),'position')+[0.12 0 0 0])
    set(c(2),'ylim',[min(temperature) max(temperature)],'xlim',[0 1])
    cim = get(c(2),'children');
    Ce qui me donne la figure suivante.

    Nom : untitled.png
Affichages : 917
Taille : 77,6 Ko

    J'ai beau faire des tests, je ne parviens pas à remplir la colorbar de droite avec la gamme de couleur 'jet'...

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(cim,'xdata',[0 1],'ydata',[min(temperature) max(temperature)],'cdata',jet,'cdatamapping','direct')

  11. #11
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut
    Oui, cela n'a aucun effet, la palette reste blanche.

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/12/2010, 19h39
  2. Réponses: 7
    Dernier message: 11/05/2010, 10h17
  3. relier deux reseau avec segment reseau diffrents
    Par passion_info dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 21/01/2009, 18h20
  4. Bouton spécial avec deux icones et deux actions différentes
    Par dk dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 10/10/2007, 15h28
  5. Réponses: 2
    Dernier message: 26/03/2007, 12h05

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