Plotting histogram with percentage
Afficher commentaires plus anciens
Hi all,
Recently I had a csv that I want to import by
T = readtable('1.csv');
and plot by histogram
Any chance to display this histogram with indivudual percentage over each bar?
Class; Value; Class start; Class end;
1;8410;-0.039916738868;-0.032423677233;
2;78271;-0.032423677233;-0.024930615599;
3;501926;-0.024930615599;-0.017437553965;
4;149453;-0.017437553965;-0.009944492330;
5;342924;-0.009944492330;-0.002451430696;
6;546900;-0.002451430696;0.005041630939;
7;537726;0.005041630939;0.012534692573;
8;527320;0.012534692573;0.020027754207;
9;478488;0.020027754207;0.027520815842;
10;345973;0.027520815842;0.035013877476;
11;276272;0.035013877476;0.042506939111;
12;694253;0.042506939111;0.050000000745;
Réponses (1)
Rik
le 6 Juil 2020
0 votes
You will have to insert those labels with the text function.
6 commentaires
Thinkboard
le 7 Juil 2020
Rik
le 7 Juil 2020
If that would be possible it would be in the documentation. So, no.
If you have trouble implementing it, feel free to post a comment with what you tried.
Adam Danz
le 8 Juil 2020
Now all you need are the x-values that define the center of each bar and the y values that define the height of each bar.
xCenters = h.BinEdges(1:end-1) + h.BinWidth/2;
yHeights = h.Values;
Then calculate the percentages
percentages = .... % I'll leave that up to you.
% There needs to be n values where n is the number of bars.
Convert the percentages to strings with 1 decimal place
percentageStrings = compose('%.1f',percentages*100);
Then label the peaks
text(xCenters,yHeights,percentageStrings,...
'HorizontalAlignment','center','VerticalAlignment','middle', ...
'FontSize', 8);
Thinkboard
le 8 Juil 2020
Rik
le 8 Juil 2020
You can either use the code Adam suggested, or look into what that function from the FEX is actually doing:
function histogramPercentage(x,fontSize)
h = histogram(x,'Visible', 'off');
[nelements,centers]= hist(x,h.NumBins);
percantages = 100 * nelements / sum(nelements);
bar(centers,nelements,'Facecolor',[0.4,0.7,0.9],'BarWidth',1);
for k = 1:numel(centers)
if percantages(k) ~= 0
text(centers(k),nelements(k),[sprintf('%.f',(percantages(k))) '%'],'HorizontalAlignment','center','VerticalAlignment','bottom','FontSize',fontSize);
end
end
So in short: you need the bin centers and the height. Then you can easily create the text objects in a loop.
Adam Danz
le 8 Juil 2020
Bin centers for bar chart can be computed using this appoach.
Catégories
En savoir plus sur Data Distribution Plots dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!