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

3 visualizaciones (últimos 30 días)
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 comentarios
Adam Danz
Adam Danz el 29 de Mayo de 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 el 29 de Mayo de 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');

Iniciar sesión para comentar.

Respuesta aceptada

Adam Danz
Adam Danz el 29 de Mayo de 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 comentarios
Adam Danz
Adam Danz el 25 de Mayo de 2021
I'm using the same variables the OP shared in a previous comment.
See the first input to the text(x,y,str) function.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Line Plots en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by