Extracting data from histogram plots
3 次查看(过去 30 天)
显示 更早的评论
Hello. I'm trying to process some data from some chemical analyses I did a while ago. I have 3 types of data: particle diameter, nitrogen content (%), and sulfur content (%). I've already managed to organize the particle diameter data into a histogram plot with something like 50 bins. Now, I'd like to figure out the average nitrogen and sulfur content of the particles in each bin. I'm not sure how to do this, though, and I haven't found any obvious tutorials to explain how to do this. Any advice?
0 个评论
采纳的回答
Adam Danz
2023-3-10
编辑:Adam Danz
2023-3-11
3 methods to group data and compute mean for each group
Each method deals with empty bins differently.
discretize + splitapply
Use discretize to group each value into the bins used in histogram and then splitapply to compute the mean for each group. Note that each bin must contain at least one data point.
Example: compute the mean of data in bins defined by edges.
rng default % for reproducibility of this demo
data = rand(1,100)*100;
edges = 0:10:100;
binID = discretize(data,edges)
a = splitapply(@mean,data,binID)
discretize + groupsummary
Use discretize to group each value into the bins and then groupsummary to compute the mean of each group. When working with vectors, the first two arguments must be column vectors.
Note that the output vector skips empty bins. See additional outputs to groupsummary to identify which bins are represented in the first output.
s = groupsummary(data(:),binID(:),'mean')
discretize + accumarray
Use discretize to group each value into the bins and then accumarray to compute the mean of all bins.
Note that empty bins are represented by a 0.
m = accumarray(binID(:),data,[],@mean)
Comparison of these methods when some bins are empty
data = randn(100,1)+10; % expected range: ~6 : ~13
edges = 0:3:15; % 5 bins but the first two will be empty
binID = discretize(data, edges);
m = accumarray(binID,data,[],@mean)
s = groupsummary(data,binID(:),'mean')
a = splitapply(@mean,data,binID)
7 个评论
Adam Danz
2023-3-11
Let's keep it civil here.
As you mentioned, if one of the bins have no values, then splitapply won't work.
I'll add alternatives to my answer.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Genomics and Next Generation Sequencing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!