MATLAB Answers

Pie chart label overlapping

45 views (last 30 days)
Eugen Syrkin
Eugen Syrkin on 28 Apr 2020
Edited: Adam Danz on 29 Apr 2020
Hey guys so I have a pie chart with labels like 1%,2% <1% and because there are 100 values it overlaps quite a lot.
I am able to remove all labels with delete(findobj(p,'Type','Text'))
Is there any way to remove just the ones with <1% or somehow group the labels together?

  0 Comments

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 28 Apr 2020
Edited: Adam Danz on 29 Apr 2020
Use the pie() output handle to obtain the text objects.
h = pie(. . .);
th = findobj(h,'Type','Text'); % text handles
Determine which text strings begin with "<"
isSmall = startsWith({th.String}, '<'); % r2016b or later
% isSmall = ~cellfun(@isempty, regexp({th.String},'^<')); % any matlab release
Either delete the text objects or replace their String values with empties.
delete(th(isSmall));
%or
set(th(isSmall),'String', '')
Demo:
h = pie(sort([linspace(0,1,20),linspace(.5,2,10),linspace(1,10,20)]));

  0 Comments

Sign in to comment.

More Answers (1)

Toder
Toder on 28 Apr 2020
Edited: Toder on 28 Apr 2020
Following the documentation for pie chart labels at https://www.mathworks.com/help/matlab/creating_plots/customize-pie-chart-labels.html, we can get the labels. Then a simple for loop can remove the ones you don't want.
x = [0.1 50 50];
p = pie(x);
pText = findobj(p,'Type','text');
for i=1:length(x)
if strcmp(pText(i).String,'< 1%')
pText(i).String = '';
end
end

  0 Comments

Sign in to comment.


Translated by