How do you create a grouped boxplot with categorical variables on the x-axis.
Show older comments
Included is a picture of what I'm trying to do. I downloaded some new functions off of MatLab downloads but they seem to be for numerical variables on both the x and y-axis. I'm looking to group categorical variables on the x-axis of the boxplot. Is there anything I can download or any existing code that does this? Thanks in advance!
Answers (2)
If your boxplot data are matrices with the same number of columns, you can use boxplotGroup() from the file exchange to group the boxplots together with space between the groups.
For example,
data = {rand(100,2), rand(100,2)+.2, rand(100,2)-.2};
boxplotGroup(data, 'PrimaryLabels', {'a' 'b' 'c'}, ...
'SecondaryLabels',{'Group1', 'Group2'}, 'GroupLabelType', 'Vertical')

Example 2
data = {rand(100,2), rand(100,2)+.2, rand(100,2)-.2};
boxplotGroup(data, 'PrimaryLabels', {'a' 'b' 'c'}, ...
'SecondaryLabels',{'Group1', 'Group2'}, 'InterGroupSpace', 2)

4 Comments
mhd z
on 6 Nov 2020
Dear Adam
thank you for this valueable file. I was wondering how the grouping is done?
I have 12 time series (each column one time series) with 100 rows in each column: data(1:100,12). I want to group this data like every 4 columns as 1 group and so on. g1 = data(1:100, 1:4), g2 = data(1:100, 4:8) and g3 = data (1:100, 9:12).
How should I define this in your code?
thank you in advance
This is from the documentation (current vs.1.2.2).
boxplotGroup(x) receives a 1xm cell array where each element is a matrix with n columns and produced n groups of boxplot boxes with m boxes per group.
So for this input below, there will be 4 groups of 3 boxplots within each group because there are 3 elements of the cell array and each element has 4 columns. That's how you should think about organizing your data.
data = {rand(100,4), rand(20,4)*.8, rand(1000,4)*1.2}
boxplotGroup(data)

It sounds like what you want is,
g{1} = data(1:100, 1:4:end); % or 1:4:9
g{2} = data(1:100, 2:4:end); % or 2:4:10
g{3} = data(1:100, 3:4:end); % etc.....
g{4} = data(1:100, 4:4:end);
mhd z
on 10 Nov 2020
Thank you Adam
I ran the code line by line and figured it out. I was a little comlex :)
its realy a good code. thank you
Iddo Weiner
on 22 Mar 2017
1 vote
1 Comment
Francisco Javier Perez Sibaja
on 21 Sep 2023
Thanks for your contribution, it was useful to me!
Categories
Find more on Linear Predictive Coding 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!