Percentage values in scatterhist histogram

6 vues (au cours des 30 derniers jours)
K.
K. le 25 Sep 2020
Modifié(e) : Adam Danz le 28 Sep 2020
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
  4 commentaires
Rik
Rik le 25 Sep 2020
If you don't care about the x-y-relation, why don't you simply make a histogram out of each vector separately?
Adam Danz
Adam Danz le 28 Sep 2020
Modifié(e) : Adam Danz le 28 Sep 2020
"I do not care so much for the plot. Do you know how to calculate?"
I added my answer before seeing that you didn't care about the plot but the answer still shows how to get those percentages. Fortunately the historgrams are already normalized to add up to 1 so you just need to access their "Values" properties and then multiply by 100.

Connectez-vous pour commenter.

Réponse acceptée

Adam Danz
Adam Danz le 25 Sep 2020
Modifié(e) : Adam Danz le 25 Sep 2020
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')

Plus de réponses (0)

Produits


Version

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by