Box-Whisker Plot with 5 and 95 percentiles and non-symmetric distributions.

16 次查看(过去 30 天)
Dear all,
I have a 1000x2 matrix, M, where each column represents the data of two variables. I would like to plot a boxplot of the two distributions of the data, by specifying the length of the whiskers:
boxplot(M,'Whisker',w)
However, I would like the upper and lower whiskers to represent the 5th and 95th percentiles respectively. In doing so, I have two problems:
  1. Both the distributions are highly non-symmetric, therefore, the suggestion provided here does not work, since the multiplier w is not the same for the upper and lower whiskers.
  2. Apparently, w can only takes on a scalar value, therefore, I cannot specify different multipliers for different distributions. Is there a way around this problem. In a follow up question of the same Q&A they suggest to use hold on, however the output is not good because of the overlapping of the figures.
It would be great if w could take the form of a 2xsize(M,2) array, in order to specify a specific multiplier for each distribution and for both the upper and lower whisker separately. However, I was not capable of editing in this way the original "boxplot" function.
Thanks in advance,
Edoardo
  1 个评论
markus tripolt
markus tripolt 2024-8-28
Hey Edoardo,
Have you got a solution for this problem in the meanwhile? I have the same problem. For censored data, the whiskers should display the 5 % and 95 % percentile of the data.
Cheers Markus

请先登录,再进行评论。

回答(1 个)

the cyclist
the cyclist 2024-8-28
It's a bit kludgy, but here is a way to do it by directly editing the XData and YData of the whiskers and their caps.
% Set seed for reproducibility
rng default
% Sample data
N = 100;
data = [betarnd(12,1,N,1) betarnd(1,2,N,1)];
% Calculate relevant percentiles needed to position the whiskers and their caps
Q05 = prctile(data, 5);
Q25 = prctile(data, 25);
Q75 = prctile(data, 75);
Q95 = prctile(data, 95);
% Create the default box plot
figure
h = boxplot(data);
% Find the objects for the whiskers and the caps
LW = findobj(h, 'Tag', 'Lower Whisker');
LC = findobj(h, 'Tag', 'Lower Adjacent Value');
UW = findobj(h, 'Tag', 'Upper Whisker');
UC = findobj(h, 'Tag', 'Upper Adjacent Value');
% Adjust the positions of the whiskers
set(LW(1),"YData",[Q05(1) Q25(1)]) % Lower whisker, 1st dataset
set(LW(2),"YData",[Q05(2) Q25(2)]) % Lower whisker, 2nd dataset
set(UW(1),"YData",[Q75(1) Q95(1)]) % Upper whisker, 1st dataset
set(UW(2),"YData",[Q75(2) Q95(2)]) % Upper whisker, 2nd dataset
% Adjust the positions of the caps
set(UC(1),"YData",[Q95(1) Q95(1)])
set(UC(2),"YData",[Q95(2) Q95(2)])
set(LC(1),"YData",[Q05(1) Q05(1)])
set(LC(2),"YData",[Q05(2) Q05(2)])

类别

Help CenterFile Exchange 中查找有关 Descriptive Statistics and Visualization 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by