MATLAB: Boxplot groups by mask set

boxplotgroupinggroups

I have a vector of data, and a set of masks defining my (possibly overlapping) groups:
data = rand(100,1)
grpMasks = [(1:100)'<25, (1:100)'<60&(1:100)'>10, (1:100)'>40, rand(100,1)>0.5]
So my data is 100-by-1, I have 4 groups in a 100-by-4 logical mask. I want to make a boxplot with 4 boxes, 1 per mask.
boxplot(data, grpMasks)
Makes N boxes, where N is the number of unique row combinations in grpMasks.
I know that I can loop from 1 to 4, make a single boxplot and then shift each box's X-location, but I feel like that's unnecessarily messy. I've got my data, I've got a format of my groups. Can boxplot handle this form of grouping?

Best Answer

Ah! Here's my solution. Repeat the data for as many groups as you have, and then NaN out the data not belonging to each group:
data = rand(100,1);
grpMasks = [(1:100)'<25, (1:100)'<60&(1:100)'>10, (1:100)'>40, rand(100,1)>0.5];
numGrps = size(grpMasks,2);
allData = data * ones(1,numGrps);
allData(~grpMasks) = nan;
boxplot(allData);