Adding a scatter of points in different colour to a boxplot

11 次查看(过去 30 天)
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 个评论
Adam Danz
Adam Danz 2020-6-29
编辑:Adam Danz 2020-6-29
dpb gave you the same suggestion I suggested ~4 hrs earlier. It must be a good suggestion :)

请先登录,再进行评论。

采纳的回答

Adam Danz
Adam Danz 2020-6-29
编辑:Adam Danz 2020-6-30
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 个评论

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Data Distribution Plots 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by