cg = clustergram(a, 'Cluster', 'row', ...
'DisplayRange', ceil(max(abs(a))), ...
'ColumnPDist', 'chebychev', ...
'Linkage', 'complete',...
cgfig = findall(0,'type','figure', 'Tag', 'Clustergram');
cgax = findobj(cgfig, 'type','axes','tag','HeatMapAxes');
cgImg = findall(cgax,'Type','Image','Tag','HeatMapImage');
axOverlay = copyobj(cgax, cgfig);
delete(axOverlay.Children)
linkaxes([cgax, axOverlay])
linkprop([cgax, axOverlay], {'Parent','Units',...
'InnerPosition','OuterPosition','Position','View'});
set(axOverlay,'HandleVisibility','on','Visible','on',...
'HitTest','on','PickableParts','visible',...
'Color','none','Tag','ClustergramOverlay',...
'XTick',[],'YTick',[],'xlabel',[],'ylabel',[],'title',[])
axOverlay.ButtonDownFcn = {@pseudoDataTip, cg, cgImg, axOverlay};
function pseudoDataTip(~,event,cg, cgImg, axOverlay)
xy = axOverlay.CurrentPoint(1,1:2);
xNorm = round((xy(1)-xl(1))/range(xl) * (size(cgImg.CData,2)-1) + 1);
yNorm = round((xy(2)-yl(1))/range(yl) * (size(cgImg.CData,1)-1) + 1);
cdata = cgImg.CData(yNorm,xNorm);
clim = cgImg.Parent.CLim;
rgbIdx = round((cdata - clim(1))/range(clim) * (size(cmap,1)-1) + 1);
RGB = axOverlay.Colormap(rgbIdx,:);
rgbstr = sprintf('RGB: [%.4g, %.4g, %.4g]', RGB);
th = text(cgImg.Parent, xy(1), xy(2)-range(yl)*.03, rgbstr, ...
'VerticalAlignment','Top','HorizontalAlignment','center',...
'BackgroundColor', [.996,.984,.730],'LineStyle','-', ...
plot(cgImg.Parent, xy(1), xy(2), 'ko','Markersize', 8, ...
'MarkerFaceColor',RGB,'tag','RGBMarker')
if isempty(axOverlay.ContextMenu)
fig = ancestor(cgImg,'figure');
uimenu(cm, 'Text','Delete all RGB markers',...
'MenuSelectedFcn', @(~,~)delete(findall(cgImg.Parent,'Tag','RGBMarker')));
axOverlay.ContextMenu = cm;