Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matlab image legend with color blocks

Tags:

legend

matlab

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.

Thanks.

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
colormap(custom_colormap);
labels={'Both', 'Always Moving', 'Moved'};  

hcb=colorbar('peer',gca,...
    [0.7 0.8 0.03 0.1],...
    'YTickLabel',labels,...
    'XAxisLocation','bottom',...
    'TickLength',[0 0],...
    'Color',[1 0 1]);
like image 293
SSilk Avatar asked Nov 05 '22 18:11

SSilk


1 Answers

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

set(hcb,'ycolor','w','xcolor','w')

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

like image 124
Jonas Avatar answered Nov 09 '22 13:11

Jonas