MATLAB: How to extract a colormap from a dendrogram

colormapdendrogramMATLAB

Hi, I have created a dendrogram and am happy with the colors it has selected by default. I want to create other plots using the same colormap to facilitate comparison. How do I extract the colormap from the dendrogram I have created?

Best Answer

Hello Rebecca,
I have a brute force solution for a few clusters. It looks like 'dendrogram' use the hsv colormap, and clusters with only 1 member are set to be black. The rest of the clusters are colored from
So what you can do is:
% Clustering
nClus = 10; % Let's say you have 10 clusters
clustTreeEuc = linkage(eucD,'average'); % By average euclidean distance
color = clustTreeEuc(end-nClus+2,3)-eps; % Calc. threshold based on nClus
[H,T,perm] = dendrogram(clustTreeEuc,0,'Orientation','right','ColorThreshold',...
color,'labels','myDataNames'); % Plot dendrogram
hidx = cluster(clustTreeEuc,'criterion','distance',...
'MaxClust',nClus); % idx of data in each clus
% After you plot the dendrogram, find out what color each cluster is
% You can use histcounts(hidx) to help you
% By the order of the rainbow (r y g b ...) assign each cluster a new number
% For e.g. clus 1 is green, new no. is 3. Clus 2 is red, new no. is 1 etc.
% Black is the last color (clusters with 1 member)
cidx = [4 1 7 3 8 2 6 5 9 9]; % Example with two 1 member clusters (so 9 colors)
% Colors
cmap = hsv(max(cidx)-1);
cmap(end+1,:) = [0 0 0];
cmap(cidx(hidx(i)),:) % This gives color of ith data
Hope it helps! If anyone finds a better method please let me know, thanks!