MATLAB Answers

How to dynamically name each box on a boxplot?

2 views (last 30 days)
ELCIO S
ELCIO S on 23 Apr 2019
Commented: ELCIO S on 22 May 2019
Hi! I have a struct file, in this, there are some data (see 'data.mat'). I need to make a boxplot with this. But I dont know how to use the fields name of the boxplot to put it in the boxplot figure. Can anyone help me?
Let me make it clear. In the data, there are many possible combinations who I need to compare in groups. In this way, I need, for example, see what is the effect of the parameter "b" in my results. So, for example, I need to compare the boxplot of 'data.a1.b1.c1.mem' with 'data.a1.b2.c1.mem', 'data.a1.b3.c1.mem' and 'data.a1.b4.c1.mem'. I wanna know how to put, dinamically, a1, b* and c1 in corresponding boxplot for future references, in other words, in the figure below, where I have 1, 2, 3 and 4, I need to put something like a1b1c1, a1b2c1, a1b3c1 and a1b4c1 respectively in a dynamic way.
untitled.jpg
How can I do it?
Thank you!

  0 Comments

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 23 Apr 2019
Edited: Adam Danz on 21 May 2019
You can convert the nested field names into a string using this FEX submission: fieldnamesr()
Then you can use those strings as your XTickLabels.
Here's some code that demonstrates this - you can adapt it to your needs. The demo produces a boxplot figure with nested field names as x labels.
data.a1.b1.c1 = nan;
data.a1.b2.c1 = nan;
data.a1.b3.c1 = nan;
data.a1.b4.c1 = nan;
% Get all field names
fields = fieldnamesr(data, '-full');
xLabels = strrep(fields, '.', '');
boxplot(randi(100,1,1000), randi(4,1,1000))
set(gca, 'XTickLabels', xLabels)
190521 085358-Figure 1.jpg

  1 Comment

Sign in to comment.

More Answers (0)

Sign in to answer this question.