Take the 2-minute tour ×

I'm trying to make a legend for a colormapped image that's been made from a label image and custom color map using label2rgb. Basically I want a legend that shows small rectangular samples of the colormap colors along with custom labels.

I would like to be able to set the color of the labels and the background. The image is displayed using imshow, and apparently legend has no effect on such figures.

I've tried a little hack around this using colorbar as shown below, but I'm pretty unsatisfied with it since if I resize the plot window everything gets thrown off.

Can anyone tell me how this type of legend should be made, preferably in a way so it floats and moves itself as necessary when the figure window is resized. If this is not possible, then can someone tell me how to either color the label text of a colorbar or give the colorbar's bounding box (encompassing its labels) a background color? As you can see, if I hadn't manually added a background white box, the labels would be invisible.


label_image = zeros(768, 1024);
label_image(100:400, 500:600)=1;
label_image(500:600, 100:600)=2;
label_image(25:300, 100:400)=3;

custom_colormap = [ 0 1 0; 1 0 0; 0 0 1;];

label_image = label2rgb(label_image, custom_colormap, [0 0 0]);

% Make a white backround for the colorbar.
% Don't want to have to do this line.
label_image(25:140, 775:1010,:)=255;

% Show the image
imshow(label_image, 'InitialMagnification', 50);

% Here, I would like to be able to set colorbar label text color and/ or
% colorbar bounding box background color, or better yet, use some variant
% on the legend function to do this automatically
labels={'Both', 'Always Moving', 'Moved'};  

    [0.7 0.8 0.03 0.1],...
    'TickLength',[0 0],...
    'Color',[1 0 1]);
share|improve this question
add comment

1 Answer

up vote 2 down vote accepted

You want to set the color of the x and y axes of the colorbar, respectively.


Thus, you wont have to put the white rectangle. Check get(hcb) to see a list of all the properties you can modify.

share|improve this answer
Thanks Jonas, that worked perfectly. One quick follow-up question: is there a way to automatically dock the colorbar to an approximate location within the image like there is with legend. For example, with legend you can say 'NorthEast and the legend stays in the upper right corner when you resize the figure window. With the code I have above, thing looks good with the default window size, but if I resize it, the colorbar moves around and with certain window sizes, can end up outside the image. Thanks. –  SSilk Jul 16 '11 at 15:07
A more important follow-up question: when I print the figure using the command print(gcf, 'result.png'], '-dpng');, the colorbar text switches back to black. Can you tell me how to make the text stay white when printing this figure? Thanks. –  SSilk Jul 16 '11 at 15:22
For colorbar, there are also auto-placements, such as eastoutside. As to printing - you may want to check whether you can save in a different format, such as '-depsc'. –  Jonas Jul 16 '11 at 18:27
add comment

Your Answer


