how to use the 'histfit' function for cell arrays?
Show older comments
Hello, probably this is an easy question, however I was wondering how to use the ´histfit´ function for a cell array in order to plot the data by cells (in one general plot) delimited in the X axis by the cell number? Data attached, the code showed here just plot the entire cell array , without making a difference between cells. , Thank you.
histfit(S7{1,end});
9 Comments
Scott MacKenzie
on 3 Jun 2021
It's not clear to me what you are trying to do. S7 is a 1x12 cell array. Each cell is a very small sample -- 2, 3, 4, or 5 numbers. Your example line of code produces a histogram for the last cell which contains 5 numbers only. Please try to clarify your goal.
Fercho_Sala
on 3 Jun 2021
Scott MacKenzie
on 3 Jun 2021
So, the x-axis goes from 1 to 12. At x = 1 is a histogram for the data in cell #1. At x = 2 is a histogram for the data in cell #2. And so on. Is that the idea? Sounds odd to me, given the paucity of data in each cell, not to mention the clutter of 12 histograms side-by-side. But, that's what I'm getting from your description.
Fercho_Sala
on 3 Jun 2021
Scott MacKenzie
on 3 Jun 2021
By "plot the whole histogram of the S7 array", do you mean a single histogram with all the data in S7 lumped together?
Fercho_Sala
on 3 Jun 2021
Scott MacKenzie
on 3 Jun 2021
Here's one way to do this...
load S7;
y = [];
for i=1:length(S7)
y = [y S7{i}'];
end
histfit(y,10); % 10 bins

There might be a one-line approach to putting the S7 data into a vector -- not sure.
Fercho_Sala
on 3 Jun 2021
Scott MacKenzie
on 3 Jun 2021
@Fercho_Sala Not that I'm aware of
Answers (1)
vidyesh
on 22 Feb 2024
Edited: Walter Roberson
on 22 Feb 2024
Hello,
I understand that you're looking to create a histogram for all the values within your cell array ‘S7’ combined, and you're aiming for a solution that avoids loops, ideally condensing it into a single line of code.
This can be achieved by concatenating all cell contents vertically using ‘cat(1, S7{:})’, which stacks the data from each cell into a single column vector. Then, we can apply histfit directly to this vector. Here's the streamlined code:
load('S7.mat')
histfit(cat(1,S7{:}),10)
For more details on the cat function and its usage, you can refer to the following link: https://www.mathworks.com/help/matlab/ref/double.cat.html
Hope this helps
Categories
Find more on Histograms in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!