How can I retrieve data from an histogram?

Hi Everyone,
I have created a figure using histfit(NUMERIC1,n,'normal') where 'NUMERIC1' is the vector, 'n' the number of histograms i want to plot and 'normal' refers to the normal distribution
Once the figure is plotted I get the normal distribution of the vector 'NUMERIC1'. Now, I want to retrieve the data (so the value of the vector 'NUMERIC1') that are contained in each bar. How can I do that?
Thanks,
Matteo

 Accepted Answer

hHist = histfit( rand(100,1), 3, 'normal' )
hHist(1).YData
will give you the numbers if you extract the values from what that gives you.
hHist should be a vector of two graphics handles, the first is a patch that renders the bar chart (the 2nd is a Line object).
Because it is a patch object you get the YData out in slightly less obvious format than you would for a line plot, but the values you want are obvious from its result.

9 Comments

I'm not sure you understand my question;
What I want are the exact value on the x-axes. For instance with your script:
hHist = histfit( rand(100,1), 3, 'normal' )
the plot will be a bar chart with 3 bars. My goal is to obtain the x_value inside one bar. Assuming that the x-range of the first bar is 0-0.33 what I want are the exact value generated by the function rand(100,1) included in the range 0-0.33
Thanks
hHist(1).XData
will contain the values you want. Again it is complicated by being a patch, but in my example the final row (in fact either of the final 2 rows) will give you the values at the end of each bar and hHist(1).XData(1,1) will give you the starting x-value.
I get it. But when I use
hHist(1).XData Matlab said ''??? Improper index matrix reference.''
The structure is new with R2014b.
Use the get function for earlier versions (and also R2014b):
xd = get(hHist(1), 'XData');
Ah yes. This is a bit of a problem with Matlab answers after such a significant software upgrade.
Since the forum doesn't force people to include their Matlab version it is difficult to know which syntax to use.
Propagating the old syntax for people who are working in R2014b doesn't seem like a good solution, but otherwise anyone < R2014b just gets an answer that requires a correction!
I actually prefer the ‘old’ handle graphics. I don’t object to the structure concept, but a lot of the old functionality is gone. I’d like to have it back.
Thanks a lot! Now is working:)
@Matteo — If Adam’s Answer solved your problem, please Accept it.

Sign in to comment.

More Answers (1)

In newer versions of MATLAB, all you need to do is:
counts = h.Values
This will give you the number of values in each bin. You can change the name after the dot above to any of the following:
'BinCounts', 'BinCountsMode', 'BinEdges', 'BinLimits', 'BinLimitsMode', 'BinMethod', 'BinWidth', 'BusyAction', 'ButtonDownFcn', 'CreateFcn', 'Data', 'DeleteFcn', 'DisplayName', 'DisplayStyle', 'EdgeAlpha', 'EdgeColor', 'FaceAlpha', 'FaceColor', 'HandleVisibility', 'HitTest', 'Interruptible', 'LineStyle', 'LineWidth', 'Normalization', 'NumBins', 'Orientation', 'Parent', 'PickableParts', 'Selected', 'SelectionHighlight', 'Tag', 'UIContextMenu', 'UserData', 'Visible', 'Categories'
For example, to call the bin limits:
h.BinLimits

1 Comment

You were able to aquire the number of values per bin, but could you get the values themselves?

Sign in to comment.

Asked:

on 2 Mar 2015

Commented:

on 28 Apr 2019

Community Treasure Hunt

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

Start Hunting!