Pie chart label overlapping
91 ビュー (過去 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)]));
1 件のコメント
Giuseppe Degan Di Dieco
2021 年 5 月 24 日
Dear Adam,
you're awesome, your help was so precious.
Thanks, best.
その他の回答 (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!