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

조회 수: 3 (최근 30일)
cgo
cgo 2020년 5월 29일
댓글: Adam Danz 2021년 5월 25일
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
Adam Danz
Adam Danz 2020년 5월 29일
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 2020년 5월 29일
%%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');

댓글을 달려면 로그인하십시오.

채택된 답변

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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Labels and Annotations에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by