chang thenoob
chang thenoob

Reputation: 113

Matlab - Add a specific tick on a colorbar

I'm representing a surface using "surf" function, with a colorbar. I would like to keep the default ticks of the colorbar, but add a custom tick on this colorbar, at a specific value (that I could make red to distinguish it from other ticks for example). Any idea on how to add a custom tick like that with keeping existing ticks on the colorbar ?

Thanks

Upvotes: 1

Views: 554

Answers (1)

Wolfie
Wolfie

Reputation: 30175

As Luis mentioned in the comments, you can add an additional tick mark like so

h = colorbar; 
newTick = 0.75;
h.Ticks = sort([h.Ticks newTick]);

If you want to add a line to the bar, the easiest thing (I think) is to use an annotation which is positioned relative to the figure (the same as the colorbar), so we can overlay it

pos = h.Position;
r = (newTick - min(h.Ticks))/(max(h.Ticks)-min(h.Ticks));
annotation( 'line', pos(1)+[0, pos(3)], [1, 1]*(pos(2)+pos(4)*r), ...
            'color', [1,0,0], 'linewidth', 2 );

I'm setting the x position of the annotation to match the left and right sides of the colorbar, and the y position to match the bottom plus the relative % of the height according to the tick value.

Result:

plot

Similarly, you could use annotatation exclusively to just get a red label, it's a little more convoluted to get everything lined up correctly, you have to make sure the text box is wide enough to be on a single line and vertically aligned to the middle to get the position right:

h = colorbar; 
newTick = 0.75;
pos = h.Position;
r = (newTick - min(h.Ticks))/(max(h.Ticks)-min(h.Ticks));
h = 0.2;
annotation( 'textbox', [pos(1)+pos(3)/2, (pos(2)+pos(4)*r)-(h/2), pos(3)*2, h], ...
    'color', [1,0,0], 'string', ['- ' num2str(newTick)], 'linestyle', 'none', ...
    'VerticalAlignment', 'middle' );

plot2

Upvotes: 2

Related Questions