Matlab: Comment assigner différentes colormaps / colorbars à différentes surfaces dans la même figure
Je suis assez nouveau à Matlab et avoir quelques questions.
J'ai eu deux surfaces et d'un avion dans la même figure.
Je veux utiliser différents palette de couleurs et de barre de couleur pour b et une autre palette de couleurs et de barre de couleur pour les c de. s est la couleur fixe de sorte qu'il n'est pas un problème.
Laissez-moi vous expliquer ce que je suis en train de réaliser:
cmap1=colormap(topobathy) -->cmap1 est 64x3 double comme prévu
cmap2=colormap(redwhitegreen)
créer cdata1 à l'aide de cmap1 (c'est la première partie je ne peux pas comprendre comment à l'échelle z données à l'aide de cmap1, par défaut CData contient les valeurs z)
b=surf(x,y,z,cdata1)
barre de couleur pour b à l'aide de valeurs z
c=pcolor(x,y,(z-z0)) - je veux utiliser cmap2 pour celui-ci.
barre de couleur pour c à l'aide de (z-z0) valeurs
Voici ce que j'ai à ce jour et les problèmes que je rencontre
b=surf(x,y,z);
colormap(topobathy);
cbar1=colorbar;
set(get(cbar1,'ylabel'),'String', 'Elevation (m)', 'Rotation', 90)
hold on;
s=surf(x,y,z1,'FaceColor',[0.278 0.788 0.788])
hold on;
change=z-z0;
c=pcolor(x,y,change)
set(c,'ZData',100 + 0*change); %plotting it above the other surfaces
colormap(redwhitegreen)`
à ce point de la palette de couleurs est mis à redwhitegreen pour b, barre de couleur de b
Je ne peux pas obtenir la deuxième barre de couleur avec son propre clim etc.
J'ai utilisé le freezeColors et cbfreeze expliqué dans ce lien:
http://blogs.mathworks.com/pick/2009/07/24/using-multiple-colormaps-in-a-single-figure/
mais une chose fonctionne que si vous embêter une autre chose (probablement de ma faute). Je veux savoir comment avoir un contrôle complet sur mes objets sans l'aide externe m des fichiers de toute façon.
Toute aide est appréciée.
source d'informationauteur theenemy
Vous devez vous connecter pour publier un commentaire.
L'idée de base est que vous concaténer la carte des couleurs, et puis shift/mise à l'échelle des données de couleur (
CData
) des différents parcelle de poignées pour s'aligner avec les parties souhaitées de la palette de couleurs. Donc, sans le savoir ce que vos fonctions personnalisées ou de données, vous pourriez faire quelque chose commecolormap(topobathy(64); redwhitegreen(64))
puis à l'échelle de laCData
deb
dans la gamme [1,64] et laCData
dec
dans la gamme [65,128].Il y a un excellent guide sur le site de MathWorks qui explique tout cela (même utilise
surf()
etpcolor()
comme ton exemple):http://www.mathworks.com/support/tech-notes/1200/1215.html#Example_1
Pour la barre de couleur, vous pouvez tout simplement faux les tiques et les étiquettes de la même manière. Ici est rude coup à faire une barre de couleur pour l'exemple ci-dessus:
J'ai eu le même problème que vous, et la meilleure (et la seule) solution que j'ai trouvé est le suivant:
Concaténer les deux carte des couleurs que je voulais:
Donc, la première palette de couleurs (
cmap1
) sera utilisé pour Axes1, et la deuxième colormap (cmap2
) pour Axes2. Je suppose que Axes1 et Axes2 sont dans la même figure.Normaliser les données, donner une échelle de 0 à 1 pour les données de l'Axes1, et de 1 à 2 pour les données de Axes2. Donc, Axes1 dans [0, 1] et Axes2 dans [1 2].
Pour l'ensemble de données sur les Axes 2:
Lorsque les représentant:
Utilisation pcolor ou du surf, en fonction de vos besoins.
Espérons que cela aide!
Matlab a fourni le code pour une fonction newclim qui résout ce problème proprement par la concaténation de la carte des couleurs dans une palette de couleurs. Je n'ai pu trouver cette documentation sur le 2012b Aider, mais pas en ligne.
Noter que les axes utilisés pour mettre à jour la CLim comme la dernière étape pourrait être les axes de surf des parcelles, qui est de savoir comment j'ai appliqué ce code.
Le Calcul De La Couleur Des Limites
La clé de cet exemple est le calcul des valeurs de CLim qui causent chaque surface d'utiliser la section de la palette contenant les couleurs appropriées.
Pour calculer les nouvelles valeurs de CLim, vous avez besoin de savoir
La longueur totale de la palette (CmLength)
Le début palette emplacement à utiliser pour chaque axes (BeginSlot)
La fin palette emplacement à utiliser pour chaque axes (EndSlot)
Le minimum et le maximum CData valeurs des objets graphiques contenues
dans les axes. Qui est, les valeurs des axes CLim bien déterminé
par MATLAB quand CLimMode est automatique (CDmin et CDmax).
Tout d'abord, définir intrigue secondaire des régions et de tracer les surfaces.
Concaténer deux carte des couleurs et installer la nouvelle palette de couleurs.
Obtenir les données dont vous avez besoin pour calculer de nouvelles valeurs pour la CLim.
La définition d'une Fonction pour Calculer la CLim Valeurs
Le calcul de nouvelles valeurs pour la CLim consiste à déterminer la partie de la palette de couleurs que vous voulez pour chaque axes à utiliser par rapport au total de la palette de couleurs taille et de l'échelle de ses Clim gamme en conséquence. Vous pouvez définir une fonction MATLAB pour ce faire.
Les arguments d'entrée sont identifiés dans la liste ci-dessus. La fonction première calcule le pourcentage du total de la palette de couleurs que vous souhaitez utiliser pour un particulier axes (PCmRange) et puis calcule la CLim nécessaire d'utiliser la partie de la palette donné la CData gamme dans les axes. Enfin, il détermine les valeurs maximales et minimales requises pour le calcul CLim gamme et renvoie ces valeurs. Ces valeurs sont de la couleur des limites pour les axes.
À l'aide de la Fonction
Utiliser le newclim de la fonction à régler la CLim valeurs de chacun des axes. La déclaration
définit la CLim valeurs pour les premiers axes de sorte que la surface utilise la couleur des fentes de 65 à 120. La surface éclairée utilise le plus faible 64 slots. Vous avez besoin de réinitialiser ses CLim valeurs.
L'utilisation de la Fonction Travaux
MATLAB permet de spécifier des valeurs pour les axes CLim propriété, même si ces valeurs ne correspondent pas à la CData des objets graphiques affichés dans les axes. Le minimum CLim valeur est toujours associé à la première couleur dans la palette de couleurs et le maximum de la CLim valeur correspond toujours à la dernière couleur dans la palette de couleurs, si oui ou non il y a vraiment de tout CData valeurs correspondant à ces couleurs. Par conséquent, si vous spécifiez des valeurs pour la CLim qui s'étendent au-delà de l'objet réel CData minimum ou maximum, MATLAB couleurs de l'objet avec seulement un sous-ensemble de la palette de couleurs.
La newclim fonction calcule les valeurs pour la CLim que la carte graphique de l'objet réel CData valeurs de début et de fin palette machines à sous que vous spécifiez. Il le fait par la définition d'un "virtuel" objet graphique ayant le calcul CLim valeurs.