How to improve groups in boxplot matlab?

4 visualizzazioni (ultimi 30 giorni)
EM geo
EM geo il 19 Dic 2020
Commentato: EM geo il 22 Dic 2020
Hi everybody!
I'm trying to create a boxplot with multiple variables.
This is my code:
h = boxplot(L_levtrue,{ID_stop_levtrue,Nn_levtrue,Litol_levtrue},'ColorGroup',Litol_levtrue);
And this is the output:
The variable I used to create the boxplot is L_levtrue. I would like to create a unique label based on ID_stop_levtrue (the numbers 3203, 3203 etc..) and a vertical line which separate these groups. I attached my data here.
Can anybody help me?
Thanks in advance!!

Risposta accettata

Adam Danz
Adam Danz il 19 Dic 2020
To add vertical lines that separate groups from the first grouping variable, add 'FactorSeparator',1.
h = boxplot(L_levtrue,{ID_stop_levtrue,Nn_levtrue,Litol_levtrue},'ColorGroup',Litol_levtrue,'FactorSeparator',1);
  3 Commenti
Adam Danz
Adam Danz il 20 Dic 2020
There might be a better way to do this but the demo below replaces the strings in row 1 of the labels with the strings in row2, then replaces the labels in row 2 with the labels in row 3, and then replaces the first label in each group of row 3 with the unique label for the group.
The loop that's commented-out at the end centers that label but a listener created in the boxplot function will reposition those labels any time the figure is resized.
Alternatively you could remove the 3rd row of labels and put the text within the figure at the top, center of each group.
h = boxplot(L_levtrue,{ID_stop_levtrue,Nn_levtrue,Litol_levtrue},'ColorGroup',Litol_levtrue,'FactorSeparator',1);
tx = findobj(gca,'Type','Text');
txPos = cell2mat(get(tx,'Position'));
txStr = {tx.String};
% Remove first row of text and shift 2nd and 3rd rows upward
% The first row of text will be toward the end of the text handle array
textrow = [repelem([3;2;1], size(h,2),1), repmat((1:size(h,2))', 3,1)];
% Store the text from 1st row
[row1labels,grpIdx] = unique(txStr(textrow(:,1)==1),'stable');
% Move rows 2 and 3 to rows 1 and 2.
drawnow(); pause(.05)
set(tx(textrow(:,1)==1), {'String'}, txStr(textrow(:,1)==2)')
set(tx(textrow(:,1)==2), {'String'}, txStr(textrow(:,1)==3)')
% Remove all but one label per group in row 3
row3tx = flipud(tx(textrow(:,1)==3));
delete(row3tx(~ismember(1:numel(row3tx),grpIdx)));
row3tx(~ismember(1:numel(row3tx),grpIdx)) = [];
% Set remaining label to the unique group label
set(row3tx, {'String'}, row1labels(:))
% % Center the group label
% for i = 1:numel(row3tx)
% row3tx(i).Position(1) = mean(txPos(strcmp(txStr,row3tx(i).String),1));
% drawnow(); pause(.05)
% end
EM geo
EM geo il 22 Dic 2020
thank you so much!!!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Characters and Strings in Help Center e File Exchange

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by