I would like a colorbar that only shows the colors of numbers that exist in the dataset.
Example:
x = -2*pi:0.01:2*pi;
y = x;
[X Y] = meshgrid(x,y);
Z = sign(round(cos(X).*cos(Y)));
imagesc(x,y,Z);colorbar;
There are only 3 possible numbers in the output matrix. Unfortunately, the colorbar will still show a full gradient.
I would appreciate a method for generating a colorbar with only the levels that are present.

1 commentaire

Sean de Wolski
Sean de Wolski le 7 Sep 2011
+1, well worded clear and concise question

Connectez-vous pour commenter.

 Réponse acceptée

Sean de Wolski
Sean de Wolski le 7 Sep 2011

1 vote

X = sign(round((rand(10)-.5)*2));
imagesc(X);
un_X = unique(X);
colormap(cool(length(un_X)));
H = colorbar;
set(H,'ytick',un_X);
Manually set the colormap and the colorbar's ytick to the unique values of X.

3 commentaires

Walter Roberson
Walter Roberson le 7 Sep 2011
I read the question as asking that only the colors actually present in the image appear in the colorbar, not that only those ones are labelled.
Sean de Wolski
Sean de Wolski le 7 Sep 2011
I saw that after I posted, see edit.
Jonathan
Jonathan le 7 Sep 2011
Answered both the question I had, and the one I hadn't thought of.
Thank you

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Color and Styling dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by