increasing the fontsize of the y-label tickmarks on a dendrogram/tree

7 views (last 30 days)
I created a dendrogram where the x-axis is the distance/dissimilarity between clusters and the y-axis are the objects. I want to increase the font size, but only the x-axis objects are increased, the y-axis labels remain the same. How do I do this?
  6 Comments
Adam Danz
Adam Danz on 29 May 2020
I can provide a quite answer as soon as I have a working example that produces your plot (or you could attach the figure file).
cgo
cgo on 29 May 2020
%%I also made modifications to the colours as a visualization requirement.
X = rand(10,5);
Y = pdist(X);
Z = linkage(Y);
labels = {'man1','man2', 'man3','man4','man5','woman1','woman2','woman3','woman4', 'woman5'};
H = dendrogram(Z,0, 'Labels', labels, 'Orientation','left');
set(H,'LineWidth',2)
ax = gca; % get the axes handle
X = get(ax.Children,'XData'); % Get x values of all lines
Y = get(ax.Children,'YData'); % Get y values of all lines
ax = gca; % get the axes handle
lab = ax.YAxis.TickLabels; % get all the labels
loc = ax.YAxis.TickValues; % get all labels location
[ulab,~,lab_ind] = unique(lab); % find all unique labels
clr = lines(numel(ulab)); % make a color map
for k = 1:numel(ulab) % for every type of lable
ind = strcmp(ulab{k},lab); % find all instances in lab
x = repelem(ax.XAxis.Limits(1)-0.01,sum(ind)); % make an x position vector
% place this lable at the same locations with a distinct color:
text(x,loc(ind),lab(ind),'Color',clr(k,:));
end
ax.YAxis.TickLabels = []; % remove the original labels
% replace the original labels with white space, to keep the axes position:
ax.YAxis.TickLabels = repelem(' ',max(cellfun(@numel,lab)));
for k = 1:numel(Y)
if Y{k}(1)==fix(Y{k}(1))
line(ax,X{k}(1:2),Y{k}(1:2),'Color',clr(lab_ind(Y{k}(1)),:),...
'LineWidth',2);
end
if Y{k}(3)==fix(Y{k}(3))
line(ax,X{k}(3:4),Y{k}(3:4),'Color',clr(lab_ind(Y{k}(3)),:),...
'LineWidth',2);
end
end
set(gca,'fontsize',18)
xlabel('distance/dissimilarity between clusters');

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 29 May 2020
Your y-labels aren't really tick labels. They are text objects. You need to store their handles and set their fontsize directly.
textLabels = gobjects(size(ulab)); % PREALLOCATE HANDLES VECTOR
for k = 1:numel(ulab)
% [ YOUR OTHER CODE GOES HERE] ....
textLabels(k) = text(x,loc(ind),lab(ind),'Color',clr(k,:)); % STORE EACH HANDLE
end
Then change fontsize
set(textLabels,'FontSize', 18)
However, the whole approach seems inefficient.
Instead of defining the labels at the top of your code and then change the labels within the loop, just set the labels correctly before making the plot. That way your lables are actual y-tick labels and will respond to set(gca,'fontsize',18).
  4 Comments

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!