Repeating values on colorbar

8 views (last 30 days)
I have set a colobar for an experiment with a user defined limit for it, but i dont know why the colorbar is repeating the values cyclically. This is the part of the code that generates colorbar.
limColorBar = 2.0;
colormap(ha,'hot');
caxis([0,limColorBar])
hcolorBar = colorbar(ha); hcolorBar.LimitsMode ='manual';
hcolorBar.Limits = [0,limColorBar];
ha.CLim = [0,limColorBar];
hcolorBar.TickLabels = round((1/17)*hcolorBar.Ticks,2);%scalefactor 1/17 for 1.6mag; 4/83 for 2.5mag
xlabel(hcolorBar,'mm/min')
Please help me rectify this.
Thank you.
5 Comments
一个dam
一个dam on 7 Jan 2020
When you resize a window the number of ticks generally changes so your number of tick labels may well become insufficient for the number of ticks. When this happens it repeats the labels you have given it for the extra ticks which do not have a label.
To deal with this you would likely have to add some code that responds to a figure resize event or simply choose how many ticks you want and hard code them, then create your tick labels from them and then when the window resizes it will not recalculate ticks.

Sign in to comment.

一个ccepted Answer

Ganesh Regoti
Ganesh Regoti on 29 Jan 2020
一个ccording to the doc , Tick mark labels, specified as a cell array of character vectors, a string array, a numeric array, a character vector, or a categorical array. By default, the colorbar labels the tick marks with numeric values. If you specify labels and do not specify enough labels for all the tick marks , then MATLAB® cycles through the labels.
Below is one workaround
closeall; clc;
indexedImage = imread('cameraman.tif');
% Make it go from 0 - 2:
indexedImage = 2 * mat2gray(indexedImage);
imshow(indexedImage);
limColorBar = 2.0;
colormap('hot');
caxis([0,limColorBar])
hcolorBar = colorbar();
hcolorBar.LimitsMode ='manual';
hcolorBar.Limits = [0,limColorBar];
temp = hcolorBar.TickLabels;
hcolorBar.Ticks = [str2double(temp(1)) str2double(temp(2)) str2double(temp(3)) str2double(temp(4)) str2double(temp(5))];
hcolorBar.TickLabels = round((1/17)*hcolorBar.Ticks,2);%scalefactor 1/17 for 1.6mag; 4/83 for 2.5mag
一个nother workaround
closeall; clc;
indexedImage = imread('cameraman.tif');
% Make it go from 0 - 2:
indexedImage = 2 * mat2gray(indexedImage);
imshow(indexedImage);
limColorBar = 2;
colormap('hot');
caxis([0,limColorBar])
hcolorBar = colorbar();
hcolorBar.LimitsMode ='manual';
hcolorBar.Limits = [0,limColorBar];
hcolorBar.Ticks = linspace(0,limColorBar,5);%This depends on limcolorbar value
hcolorBar.TickLabels = round((1/17)*hcolorBar.Ticks,2);%scalefactor 1/17 for 1.6mag; 4/83 for 2.5mag
xlabel(hcolorBar,'mm/min') ;
Hope this helps!
1 Comment
Sunil S Hosakoti
Sunil S Hosakoti on 6 Feb 2020
It works, Thanks a lot.

Sign in to comment.

More Answers (1)

Ruger28
Ruger28 on 6 Jan 2020
Using the example given by Image Analyst, I commented out the Limits lines of code, and it works as intended. Give that a try.
indexedImage = imread('cameraman.tif');
% Make it go from 0 - 2:
indexedImage = 2 * mat2gray(indexedImage);
imshow(indexedImage);
limColorBar = 2.0;
colormap('hot');
caxis([0,limColorBar])
hcolorBar = colorbar();
% hcolorBar.LimitsMode = 'manual';
% hcolorBar.Limits = [0,limColorBar];
hcolorBar.TickLabels
hcolorBar.TickLabels = round((1/17)*hcolorBar.Ticks,2)%scalefactor 1/17 for 1.6mag; 4/83 for 2.5mag
xlabel(hcolorBar,'mm/min')
3 Comments
Ruger28
Ruger28 on 7 Jan 2020
Strange. It worked for me on 2018b.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!