Boxplot for both x and y axis with different box widths.

How can we make a boxplot like the one below for both x and y data (the box widths of each group that are x-data related are different). I tried boxplot(X,Y, group) but it did not work.
boxplot for x- and y-data

댓글 수: 4

Jonas
Jonas 2021년 4월 30일
편집: Jonas 2021년 4월 30일
i think you can not specify mutiple different box widths directly, you would have to edit the box sizes manually by accesing the XData of the boxes
boxchart does offer a setting for the box width.
Adam Danz
Adam Danz 2021년 4월 30일
편집: Adam Danz 2021년 4월 30일
I missed that since BoxWidth is not mentioned on the documentation page for boxchart, however it is listed in the properties page.
Thanks, Benjamin.
Thanks for your nice suggestions! boxchart works

댓글을 달려면 로그인하십시오.

 채택된 답변

Benjamin Kraus
Benjamin Kraus 2021년 4월 30일
편집: Benjamin Kraus 2021년 4월 30일
The boxplot command creates a group of lines, so if you wanted to adjust the box widths you would need to manually adjust the XData properties on each line to move them to the desired locations.
The better alternative is to use the new boxchart command. The object created by the the boxchart command has a BoxWidth property, but I suspect you won't need it, because even when you specify x values, the boxes created by the boxchart command have uniform widths.
boxchart(randn(1000,1), 'BoxWidth', 0.3);
or
boxchart(randi(10,1000,1),randn(1000,1));

댓글 수: 4

An extension of Benjamin Kraus's example where the width of each box is specified using boxchart.
rng('default')
y = rand(20,5).*randi(4,1,5) + rand(1,5)*2;
x = 1:size(y,2); % x position of each box
widths = [.25 .6 .1 .9, .45]; % width of each box (0:1)
figure();
ax = axes();
% X-axis limits must be set prior to adding the boxes
% and they are apparently categorical even if the
% inputs are numeric. Here's an easy way to set
% the x-limits to the range of your data (deleted later)
temp = plot(ax, categorical(x), nan(1,5));
hold(ax,'on')
xl = xlim(ax); % Store original axis limits, boxchart may change them
for i = 1:size(y,2)
xdata = repelem(x(i),size(y,1),1); % Specify x=coordinate of box
boxchart(ax,y(:,i),'XData',xdata,'BoxWidth',widths(i))
end
xlim(ax,xl) % Restore xlimits
delete(temp)
@Adam Danz The reason the x-axis is categorical is because you are setting the XData using a name-value pair. If you specify the x-data before the y-data, it will create a numeric ruler.
Do this:
boxchart(ax,xdata,y(:,i),'BoxWidth',widths(i))
Instead of this:
boxchart(ax,y(:,i),'XData',xdata,'BoxWidth',widths(i))
With that tweak, your code now becomes:
rng('default')
y = rand(20,5).*randi(4,1,5) + rand(1,5)*2;
x = 1:size(y,2); % x position of each box
widths = [.25 .6 .1 .9, .45]; % width of each box (0:1)
figure();
ax = axes();
hold(ax,'on')
for i = 1:size(y,2)
xdata = repelem(x(i),size(y,1),1); % Specify x=coordinate of box
boxchart(ax,xdata,y(:,i),'BoxWidth',widths(i))
end
Thanks for the explanation, Benjamin.
I wonder what the logic is in converting numeric inputs to categorical under one syntax but not the other.
Thank you very much! Cool, the box widths now are controlled by some numbers. I tried some means but did not make it. The locations of x-data are also controlled by the real values not by even distance. Thanks a lot! This is really cool!!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

markus tripolt
markus tripolt 2024년 8월 18일

0 개 추천

Hi all,
I have a additional question. Is there a function to set the box width according to the number of data points automatecally, or is the only way to calc the percentage per hand typ it to the width vector?
Thanks Markus

댓글 수: 1

@markus tripolt: If you have a new question, your best bet is to post a new question to MATLAB Answers, rather than adding an "answer" to an existing question.
There is no method to automatically set the box width based on the number of data points. I'm not sure how you would use the number of data points to calculate the box widths.
If you post a new question, can you clarify how you want to convert the "number of data points" into the box width"? In addition, please clarify whether you are referring to boxchart or boxplot, because the answers will be very different between the two.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Data Distribution Plots에 대해 자세히 알아보기

질문:

2021년 4월 30일

댓글:

2024년 8월 19일

Community Treasure Hunt

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

Start Hunting!

Translated by