Adding a scatter of points to a boxplot

Does anyone come with with a code which can match the python generated boxplot?

1 commentaire

Presuming the points actually a set of coordinates as shown, don't see why
hold on
scatter(x,y)
with appropriate x,y arrays and the associated color arrays, etc., wouldn't come reasonably close...

Connectez-vous pour commenter.

 Réponse acceptée

dpb
dpb le 29 Avr 2018
Indeed, that seems to work just fine...
load carsmall MPG % the sample dataset variable
hold on
scatter(ones(size(MPG)).*(1+(rand(size(MPG))-0.5)/10),MPG,'r','filled')
yields
It's possible to add color with value scaling in scatter see the details on it for all the particulars.

5 commentaires

Here is the same thing with a bit more manipulations
load carsmall MPG % the sample dataset variable
MPG(:,2)=MPG(:,1).*2;
MPG(:,3)=MPG(:,1).*3;
boxplot(MPG,'Notch','on','Labels',{'mu = 5','mu = 6','mu = 6'},'Whisker',1)
lines = findobj(gcf, 'type', 'line', 'Tag', 'Median');
set(lines, 'Color', 'g');
% Change the boxplot color from blue to green
a = get(get(gca,'children'),'children'); % Get the handles of all the objects
%t = get(a,'tag'); % List the names of all the objects
%box1 = a(7); % The 7th object is the first box
set(a, 'Color', 'r'); % Set the color of the first box to green
hold on
x=ones(length(MPG)).*(1+(rand(length(MPG))-0.5)/5);
x1=ones(length(MPG)).*(1+(rand(length(MPG))-0.5)/10);
x2=ones(length(MPG)).*(1+(rand(length(MPG))-0.5)/15);
f1=scatter(x(:,1),MPG(:,1),'k','filled');f1.MarkerFaceAlpha = 0.4;hold on
f2=scatter(x1(:,2).*2,MPG(:,2),'k','filled');f2.MarkerFaceAlpha = f1.MarkerFaceAlpha;hold on
f3=scatter(x2(:,3).*3,MPG(:,3),'k','filled');f3.MarkerFaceAlpha = f1.MarkerFaceAlpha;hold on
dpb
dpb le 30 Avr 2018
Nice choices..looks good. :)
Peyman Obeidy
Peyman Obeidy le 30 Avr 2018
Thank you
Rubina Chandnani
Rubina Chandnani le 22 Juil 2021
In the line of code in scatter, is there a way to use a different color using uisetcolor? (I don't want to use the default colors).
Seth DeLand
Seth DeLand le 26 Mai 2022
Modifié(e) : Seth DeLand le 26 Mai 2022
I'd like to add that there is now an easier way to do this with boxchart (added in R2020a) and swarmchart (added in R2020b):
load carsmall MPG % the sample dataset variable
MPG(:,2)=MPG(:,1).*2;
MPG(:,3)=MPG(:,1).*3;
boxchart(MPG)
hold on
x = repmat(1:3,100,1); % create the x data needed to overlay the swarmchart on the boxchart
swarmchart(x,MPG,[],'red')

Connectez-vous pour commenter.

Plus de réponses (2)

Hassan
Hassan le 18 Mai 2019
Hi, here you can find a one line solution for the jitter like function using the 'undocumented matlab' features.
load carsmall MPG
figure;
MPG(:,2)=MPG(:,1).*2;
MPG(:,3)=MPG(:,1).*3;
boxplot(MPG);
hold on;
x=repmat(1:3,length(MPG),1);
scatter(x(:),MPG(:),'filled','MarkerFaceAlpha',0.6','jitter','on','jitterAmount',0.15);
Best, HM

1 commentaire

This is the best answer! very nice presentation.
Tips: if you used group in box plot, do a 'unique' to get the right x axis.
boxplot(report_table.data,report_table.group_id);
hold on
[C, ~, ic]= unique([report_table.group_id],'stable');
scatter(ic,report_table.data,'filled','MarkerFaceAlpha',0.6','jitter','on','jitterAmount',0.15);
xlabel('Group ID');
ylabel('Data');
hold off

Connectez-vous pour commenter.

Ernesto Salcedo
Ernesto Salcedo le 27 Nov 2020
Modifié(e) : Ernesto Salcedo le 27 Nov 2020
Boxchart solution for grouped categorical data

Table with random group

count = 20;
T = table(randi(10,count,1), categorical(repmat(["papaya";"silicon"], count/2,1)),'VariableNames',["Recharges","model"])
T.idx = grp2idx(T.model); % convert categories into group indices

Boxchart

figure
hc = boxchart(T.idx, T.Recharges); % group by index
hold on
% overlay the scatter plots
for n=1:max(unique(T.idx))
hs = scatter(ones(sum(T.idx==n),1) + n-1, T.Recharges(T.idx == n),"filled",'jitter','on','JitterAmount',0.1);
hs.MarkerFaceAlpha = 0.5;
end
set(gca,"XTick", unique(T.idx),"XTickLabel",categories(T.model))

Community Treasure Hunt

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

Start Hunting!

Translated by