MATLAB: Percentage values in scatterhist histogram

histogramMATLABpercentagescatterhist

Hello all,
I need a help with scatterhist and the information on each histogram.
For example lets have the next plot:
scatterhist(log(rand(1,100)),log(rand(1,100)),'Marker','o','Direction','out');
I would like to add (or get) values above the histogram bars; the percentage of the distribution.
Please, is anyone could help on it?
Thank you

Best Answer

The histograms are normalized which means their bar heights are already a percentage.
The percentage of each bar can be found in the demo below; look for
  • xHist.Values.*100
  • yHist.Values.*100
Here's now to access those axes and add text elements.
% Use output to get axis handles
h = scatterhist(log(rand(1,100)),log(rand(1,100)),'Marker','o','Direction','out');
% Get hist axis handles
xHist = findobj(h(2),'Type','histogram');
yHist = findobj(h(3),'Type','histogram');
% increase ylim/xlim to make room of text labels
h(2).YLim(2) = h(2).YLim(2).*1.2; % 20% increase;

h(3).YLim(2) = h(3).YLim(2).*1.2; % 20% increase;
% Compute bin centers and labels, add text
xBinCenter = xHist.BinEdges(2:end)-xHist.BinWidth/2;
xHistLabels = compose('%.0f%%',xHist.Values.*100);
text(h(2),xBinCenter, xHist.Values.*1.01, xHistLabels,...
'HorizontalAlignment', 'Right', 'VerticalAlignment', 'middle', ...
'FontSize', 8, 'Rotation', 90)
yBinCenter = yHist.BinEdges(2:end)-yHist.BinWidth/2;
yHistLabels = compose('%.0f%%',yHist.Values.*100);
text(h(3),yBinCenter, yHist.Values*1.01, yHistLabels,...
'HorizontalAlignment', 'Right', 'VerticalAlignment', 'Middle', ...
'FontSize', 8)
If you want to see the histogram axes,
axis(h(2), 'on')
axis(h(3), 'on')