MATLAB Answers

Repeating values on colorbar

7 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

Show 2 older comments
Image Analyst
Image Analyst on 1 Jan 2020
What are the values your image has? What is the min and what is the max gray level? What is ha? How did you display the image? This works
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')
Sunil S Hosakoti
Sunil S Hosakoti on 6 Jan 2020
The coloarbar looks perfectly fine whe window size is small but when the window is maximised the values repeat. I have attached the snipped figures.
Any idea why this happens?Capture2.JPG
Adam
Adam 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.

Accepted Answer

Ganesh Regoti
Ganesh Regoti on 29 Jan 2020
According 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
close all; 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
Another workaround
close all; 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 6 Jan 2020
Which version of MATLAB are you using?
Sunil S Hosakoti
Sunil S Hosakoti on 7 Jan 2020
The same thing happens, the values repeat when the window is maximised.
The version i use is 2019a.
Ruger28
Ruger28 on 7 Jan 2020
Strange. It worked for me on 2018b.

Sign in to comment.