![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/288312/image.png)
Pie chart label overlapping
69 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Adam Danz
2020-4-28
编辑:Adam Danz
2020-4-29
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)]));
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/288312/image.png)
1 个评论
更多回答(1 个)
Toder
2020-4-28
编辑:Toder
2020-4-28
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
1 个评论
Giuseppe Degan Di Dieco
2021-5-24
Hi Toder,
your tip is brilliant too.
Thanks for your help, and best!
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Pie Charts 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!