Adding a scatter of points to a boxplot

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

1 Kommentar

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...

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

dpb
dpb am 29 Apr. 2018

1 Stimme

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 Kommentare

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 am 30 Apr. 2018
Nice choices..looks good. :)
Peyman Obeidy
Peyman Obeidy am 30 Apr. 2018
Thank you
Rubina Chandnani
Rubina Chandnani am 22 Jul. 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).
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')

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Hassan
Hassan am 18 Mai 2019

4 Stimmen

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 Kommentar

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

Melden Sie sich an, um zu kommentieren.

Ernesto Salcedo
Ernesto Salcedo am 27 Nov. 2020
Bearbeitet: Ernesto Salcedo am 27 Nov. 2020

3 Stimmen

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))

Kategorien

Mehr zu Discrete Data Plots finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 29 Apr. 2018

Bearbeitet:

am 26 Mai 2022

Community Treasure Hunt

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

Start Hunting!

Translated by