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 :

problème avec colormap. [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut problème avec colormap.
    Bonjour
    J'ai une question simple (la réponse risque de ne pas l'être...):
    je souhaite introduire dans une même figure deux tracés en niveaux
    de couleur MAIS avec deux colormaps différents. (J'utilise subplot
    pour définir les champs du tracé). Colormap semble agir sur la
    figure (donc sur les 2 tracés en même temps), impossible de différencier.
    Existe-il une solution ??
    Merci

  2. #2
    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
    Montre nous ton code car la solution dépend des fonctions que tu utilises pour tracer le graphique...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut le code matlab
    Voici ce que je fais schematiquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    figure(1)
    subplot(2,1,1)
    pcolor(x,y,z1); shading flat
    colormap jet
    colorbar
    subplot(2,1,2)
    pcolor(x,y,z2); shading flat
    colormap gray
    colorbar
    Le resultat, c'est "gray" pour les deux tracés...

    voila, voila....

  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 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
    Si tu n'as pas besoin des barre de couleurs, tu peux faire simplement 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
    21
    22
    23
    [x,y] = meshgrid(1:25);
     
    z1 = rand(25)*400;
    z2 = rand(25)*200;
     
    z1 = z1-min(z1(:));
    z1 = 64*z1/max(z1(:));
     
    z2 = z2-min(z2(:));
    z2 = 65+64*z2/max(z2(:));
     
    figure(1)
    colormap([jet(64) ; gray(64)])
     
    subplot(2,1,1)
    p = pcolor(x,y,z1);
    set(p,'CDataMapping','direct'); 
     
    shading flat
    subplot(2,1,2)
    p = pcolor(x,y,z2);
    set(p,'CDataMapping','direct'); 
    shading flat
    Sinon, il faut bidouiller un peu à partir de cet exemple : Simulating Multiple Colormaps in a Figure

    Ce qui donne en gros ici :
    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
    function test
     
        [x,y] = meshgrid(1:25);
     
        z1 = rand(25)*400;
        z2 = rand(25)*200;
     
        figure(1)
        colormap([jet(64) ; gray(64)])
     
        ax1 = subplot(2,1,1);
        pcolor(x,y,z1);
        shading flat
     
        ax2 = subplot(2,1,2);
        pcolor(x,y,z2);
        shading flat
     
       colormap([jet(64) ; gray(64)])
       CmLength   = length(colormap);       % Colormap length
       BeginSlot1 = 1;                           % Beginning slot
       EndSlot1   = 64;     % Ending slot
       BeginSlot2 = EndSlot1+1; 
       EndSlot2   = CmLength;
       CLim1      = get(ax1,'CLim');           % CLim values for each axis
       CLim2      = get(ax2,'CLim');
     
       set(ax1,'CLim',newclim(BeginSlot1,EndSlot1,CLim1(1),CLim1(2),CmLength))
       set(ax2,'CLim',newclim(BeginSlot2,EndSlot2,CLim2(1),CLim2(2),CmLength))
     
       axes(ax1)
       c(1) = colorbar('southoutside');
       im = get(c(1),'children');
     
       axes(ax2)
       c(2) = colorbar('southoutside');
       prop = {'xtick','xticklabel','xlim'};
       set(c(2),prop,get(c(1),prop))
       copyobj(im,c(2))
     
     
       function CLim = newclim(BeginSlot,EndSlot,CDmin,CDmax,CmLength)
          %                 Convert slot number and range
          %                 to percent of colormap
          PBeginSlot    = (BeginSlot - 1) / (CmLength - 1);
          PEndSlot      = (EndSlot - 1) / (CmLength - 1);
          PCmRange      = PEndSlot - PBeginSlot;
          %                 Determine range and min and max 
          %                 of new CLim values
          DataRange     = CDmax - CDmin;
          ClimRange     = DataRange / PCmRange;
          NewCmin       = CDmin - (PBeginSlot * ClimRange);
          NewCmax       = CDmax + (1 - PEndSlot) * ClimRange;
          CLim          = [NewCmin,NewCmax];
       end % newclim
    end

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut c'est plus que parfait
    Alors la, je dis respect et merci. C'est vraiment impeccable.
    la solution est plus compliquée que ce que je souhaitais
    (i.e. des bars de couleurs différentes pour chaque graphique) mais
    je vais me débrouiller pour simplifier.
    Merci Dut!!!

  6. #6
    Invité de passage
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1
    Par défaut
    J'ai une réponse pour ceux qui voudraient faire deux colorbar bien distinctes avec colormap différentes, il faut combiner les fonctions cbfreeze et freezecolors disponibles ici :
    http://www.mathworks.com/matlabcentr...eexchange/7943
    http://www.mathworks.com/matlabcentr...exchange/24371

    Ca peut donner ce genre de résultat :
    Images attachées Images attachées  

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

Discussions similaires

  1. Problème avec freezeColors et colormap
    Par emmun dans le forum Images
    Réponses: 1
    Dernier message: 28/05/2010, 12h03
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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