Grouped boxplot plots with different lengths and colors in different categories

9 ビュー (過去 30 日間)
Naos
Naos 2023 年 9 月 6 日
コメント済み: Voss 2023 年 9 月 7 日
Hello,
I am currently plotting three different arrays, with different length each, on the same figure using BOXPLOT. Here is currently the code that I am using (sorry for not providing a running example, I am actually loading external data):
% Load the data
x1 = ARRAY1;
x2 = ARRAY2;
x3 = ARRAY3;
% Grouping the data to plot on the same figure
group = [ ones(size(x1));
2 * ones(size(x2));
3 * ones(size(x3))];
% Plotting
% Define the color order
colors = [0 0.4470 0.7410;0.8500 0.3250 0.0980;0.9290 0.6940 0.1250];
% Plot
boxplot(X, group, 'BoxStyle','outline','Colors',colors, 'Symbol', '.');
% Fill the plots according to the color defined
h = findobj(gca,'Tag','Box');
for j=1:length(h)
patch(get(h(j),'XData'),get(h(j),'YData'),get(h(j),'Color'),'FaceAlpha',.3);
end
When running this code, I get the following figure:
I would like to do two things:
  1. Firstly, all the plots in these figure to be under the same category in the "X" axis.
  2. Secondly, to add to the same more figure, three more boxes, which are defined by arrays with different length, to the same figure but in another category.
The end result, I would be expecting something like this:
Thanks!
  1 件のコメント
Clay Swackhamer
Clay Swackhamer 2023 年 9 月 6 日
編集済み: Clay Swackhamer 2023 年 9 月 6 日
Regarding your two questions, this code should show how to approach question 1. For question 2, try modifying the line "group" so that it is like this:
group = [1,1,1, 2,2,2, 3,3,3, 4,4,4, 5,5,5,5, 6,6,6,6];
That makes it so there are three data points in group 1, 2, 3, and 4, but four data points in group 5 and 6, and it doesn't create any issue in the plot.
%% box_plot_groups
clear
close all
% Generate example data
group = [1,1,1, 2,2,2, 3,3,3, 4,4,4, 5,5,5, 6,6,6];
for i=1:numel(group)
y(i) = group(i).*rand(1);
end
% Set x axis positions of the groups
positions = [1,1.25,1.5, 2,2.25,2.5];
% Make plot
boxplot(y,group, 'positions', positions, 'Symbol', '', 'Whisker', inf)
% Create axis labels
set(gca,'xtick',[ mean(positions(1:3)), mean(positions(4:end))])
set(gca,'xticklabel',{'Category 1', 'Category 2'})

サインインしてコメントする。

採用された回答

Voss
Voss 2023 年 9 月 6 日
One way:
x1 = randn(10,1);
x2 = randn(10,1);
x3 = randn(10,1);
y1 = randn(100,1);
y2 = randn(50,1);
y3 = randn(20,1);
X = [x1;x2;x3];
Y = [y1;y2;y3];
groupX = [ ones(size(x1));
2 * ones(size(x2));
3 * ones(size(x3))];
groupY = [ ones(size(y1));
2 * ones(size(y2));
3 * ones(size(y3))];
% Define the color order
colors = [0 0.4470 0.7410;0.8500 0.3250 0.0980;0.9290 0.6940 0.1250];
data = {X,Y};
groups = {groupX,groupY};
N_categories = numel(data);
offset = [-0.25, 0, 0.25];
for ii = 1:N_categories
% Plot
h = boxplot(data{ii},groups{ii}, ...
'BoxStyle','outline', ...
'Colors',colors, ...
'Symbol','.', ...
'Widths',0.2, ...
'Positions',ii+offset);
% Fill the plots according to the color defined
for j=1:size(h,2)
patch(get(h(5,j),'XData'),get(h(5,j),'YData'),get(h(5,j),'Color'),'FaceAlpha',.3);
end
hold on
end
xlim([0.5 N_categories+0.5])
xticks(1:N_categories)
xticklabels("Category "+(1:N_categories))
  2 件のコメント
Naos
Naos 2023 年 9 月 7 日
Thanks. It is working perfectly.
Voss
Voss 2023 年 9 月 7 日
You're welcome!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeData Distribution Plots についてさらに検索

製品


リリース

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by