Annotated Heat Maps
A number of people have asked me whether MATLAB can add text to heatmaps to show the exact values. This is very easy to do, however, making a the text robust to resizing, zooming and other operations is a little trickier.
The image command or imagesc command can be used to create heat maps. The difference between the two functions is that imagesc scales the colormap of the image to give the maximum range of colors. For this example I will use some of the matrices in gallery.
data = gallery('invhess',20); imagesc(data) axis off
When the heat map is small, it is sometimes convenient to see the actual data values on the image. These are easy to add using the text function.
[rows,cols] = size(data); for i = 1:rows for j = 1:cols textHandles(j,i) = text(j,i,num2str(data(i,j)),... 'horizontalAlignment','center'); end end
This is fine until you resize the figure or zoom in. The font size for the text is fixed so the image quickly gets messy if you make it small.
around this I have created a function heatmaptext that adds listeners to the figure that adjust the font size of the text if the figure is resized or if you zoom in on the heat map.
This function is robust to resizing of the figure.
figure data = randn(40,20); heatmaptext(data,'fontcolor','w','precision',3); colormap(redgreencmap) set(gca,'Xlim',[4.5,10.5],'Ylim',[5.5,9.5]);
figure data = gallery('moler',25); heatmaptext(data,'fontcolor','r'); colormap(bone)