Adding a scatter of points in different colour to a boxplot

8 views (last 30 days)
I would like to add the mean value of each subject (n=9) to my boxplot but for each subject I would like to use a different colour.
Does anyone know how to do this?
I managed to put the points but all of them appear in same colour. Here is my code:
x = abs(randn(9,1));
y = abs(randn(9,1));
group = [ ones(size(x));
2 * ones(size(y))];
boxplot([x; y],group)
h = boxplot([x;y],group)
set(h,{'linew'},{2})
set(gca,'XTickLabel', {'X'; 'Y'})
allData = {x;y};
h = boxplot([allData{:}],group);
set(h, 'linewidth' ,2)
set(gca,'XTickLabel', {'X'; 'Y'})
hold on
xCenter = 1:numel(allData);
spread=0.2;
for i = 1:numel(allData)
plot(rand(size(allData{i}))*spread -(spread/2) + xCenter(i), allData{i}, 'mo','linewidth', 2)
end
  5 Comments
Adam Danz
Adam Danz on 29 Jun 2020
Edited: Adam Danz on 29 Jun 2020
dpb gave you the same suggestion I suggested ~4 hrs earlier. It must be a good suggestion :)

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 29 Jun 2020
Edited: Adam Danz on 30 Jun 2020
The code in the question is from this answer.
To use different colors for each group of points, you can plot the points within a loop or you can use scatter() which allows you to assign a color for each point.
It looks like you tried the loop method but you're using the same color on each iteration.
Here's what you need to add/change,
colors = jet(numel(allData));
for i = 1:numel(allData)
plot(rand(size(allData{i}))*spread -(spread/2) + xCenter(i), allData{i}, 'o','linewidth', 2, 'Color', colors(i,:))
end
To use different colors for each point within a group, use scatter()
colors = jet(numel(allData{i}));
for i = 1:numel(allData)
scatter(rand(size(allData{i}))*spread -(spread/2) + xCenter(i), allData{i}, ...
80, colors, 'filled')
end
  3 Comments

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!