How to plot box plots of data of different sizes on the same figure?
조회 수: 80 (최근 30일)
이전 댓글 표시
Hi everyone!
I have vectors of variable sizes in a cell array. I need to plot the box plot of each vector on the same figure. The Matlab function boxplot accepts only a matrix as an input, meaning that I cannot plot all the boxes together by passing a cell array. Also, it doesn't work if I hold the axes and plot the boxes one by one at different positions. A simple code is below to help you understand the issue.
x1 = randn(128, 1);
x2 = randn(100, 1);
figure
boxplot(x1, 'Positions', 1);
hold on
boxplot(x2, 'Positions', 2);
% only one box is shown
댓글 수: 0
채택된 답변
Ive J
2021년 7월 13일
편집: Ive J
2021년 7월 13일
You just need to define a grouping array:
x1 = randn(128, 1);
x2 = randn(100, 1);
X = [x1; x2];
grp = [ones(size(x1)); 2.*ones(size(x2))];
boxplot(X, grp)
댓글 수: 5
Ive J
2021년 7월 14일
After checking again the boxplot behavior, I guess there is a workaround to avoid this grouping:
x1 = randn(128, 1);
x2 = randn(100, 1);
ax = gca;
hold on
boxplot(ax, x1, 'Position', 1)
boxplot(ax, x2, 'Position', 2)
hold off
% modify XLim and YLim so that the axis covers both datasets.
ax.XLim = [0.5, 2.5]; % Make sure that ax XLim covers both
YLimCoeff = 1.1;
ax.YLim = [YLimCoeff*min([x1(:); x2(:)]), YLimCoeff*max([x1(:); x2(:)])]; % so, even if x1 and x2 come from different sources, by now, both are available
% modify XTick: current axis only has the tick value for the second boxplot
ax.XTick = [1, 2];
ax.XTickLabel = string(ax.XTick);
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Geographic Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!