How to bin struct fields based on value in another field?
Show older comments
I have a structure with multiple fields. I would like to plot a histogram of values of data in one field based on conditions in another field of each row of the struct. How would i do this?
EX:
test(1).initial=13
test(1).final=43
test(2).initial=8
test(2).final=58
test(3).initial=[26,14]
test(3).final=52
i would like to bin test.final so rows with corresponding test.initial(1) values 0-10, 11-20, 20-35 are grouped together
3 Comments
Walter Roberson
on 22 Jan 2023
test(3) looks like it would fit into two different bins; it is not clear how you would want to handle that?
Nicholas Kavouris
on 22 Jan 2023
Nicholas Kavouris
on 22 Jan 2023
Answers (1)
Walter Roberson
on 22 Jan 2023
initials = arrayfun(@(S) S.initial(1), test);
finals = [test.final].'; %assuming only one value per entry
bins = discretize(initials, [0 11 21 35]);
splitapply(@histogram, finals, bins);
legend({'[0-11)', '[11-21)', '[21-35]'});
Your bin list included 20 twice, and does not include the range between 10 and 11 (exclusive), so I had to guess what you wanted.
Categories
Find more on Data Distribution Plots 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!