I am using the boxplot function to create boxplots of my data. But I would also like to plot my data on top of the boxplots.
Can anyone please help with that?
Below is an example of my code
Data1 = [0.2658 0.1969 0.3702 0.2259 0.2575 0.2253 0.4486 0.5385 0.3982 0.2899]';
Data2 = [0.2589 0.2094 0.3575 0.2391 0.2547 0.1987 0.4156 0.5443 0.394 0.3]';
Data3 = [0.2589 0.2094 0.3575 0.2391 0.2547 0.2087 0.4256 0.5243 0.3822 0.2983]';
group = [ ones(size(Data1));
2 * ones(size(Data2))
3 * ones(size(Data3))];
boxplot([Data1; Data2; Data3],group)
h = boxplot([Data1; Data2; Data3],group)
set(h,{'linew'},{2})
set(gca,'XTickLabel', {'Data1'; 'Data2'; 'Data3'})

 採用された回答

Adam Danz
Adam Danz 2019 年 5 月 2 日
編集済み: Adam Danz 2019 年 9 月 19 日

3 投票

After some slight rearrangement of your code, I added a secton that optionally scatters the x coordinates around the centers of the boxes. Set the 'spread' to 0 to plot data points in the center of the boxes.
allData = {Data1; Data2; Data3};
h = boxplot(cell2mat(allData),group); % old version: h = boxplot([allData{:}],group);
set(h, 'linewidth' ,2)
set(gca,'XTickLabel', {'Data1'; 'Data2'; 'Data3'})
hold on
xCenter = 1:numel(allData);
spread = 0.5; % 0=no spread; 0.5=random spread within box bounds (can be any value)
for i = 1:numel(allData)
plot(rand(size(allData{i}))*spread -(spread/2) + xCenter(i), allData{i}, 'mo','linewidth', 2)
end
The x-scatter is random so the the x coordinates will differ each time the plot is created unless the rng seed is controlled.

6 件のコメント

Gina Carts
Gina Carts 2019 年 5 月 2 日
That's what I actually needed. Thanks a lot
Adam Danz
Adam Danz 2019 年 5 月 2 日
Glad I could help. Not sure if you caught my update a minute ago but I made a slight change so that the scatter can be controlled.
Jonathan Glenning
Jonathan Glenning 2019 年 9 月 19 日
編集済み: Jonathan Glenning 2019 年 9 月 19 日
Thanks for your solution, But is there a way to make this work without using data sets that have identical amounts of data points within them? Whenever I try to use this I get:
"Error using horzcat
Dimensions of arrays being concatenated are not consistent."
I recognise that my data sets arent all equal in both column and row so this is likely tripping it up, but is there a solution to this?
Adam Danz
Adam Danz 2019 年 9 月 19 日
Sure; if the vectors stored in the cell array are vertical,
% Use this
h = boxplot(cell2mat(allData),group);
% instead of this
% h = boxplot([allData{:}],group);
DM
DM 2020 年 6 月 29 日
編集済み: DM 2020 年 6 月 29 日
Is there a way to make each data appear in a different colour instead all of them being pink?
Adam Danz
Adam Danz 2020 年 6 月 29 日
The plot() command only allows you to assign one color per object. So you could plot the values within a loop where you can assign a different color on each iteration. Another method would be to use the scatter() function that allows you to assign different color for each point.

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

その他の回答 (0 件)

カテゴリ

質問済み:

2019 年 5 月 2 日

コメント済み:

2020 年 6 月 29 日

Community Treasure Hunt

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

Start Hunting!

Translated by