Box-Whisker Plot with 5 and 95 percentiles and non-symmetric distributions.
20 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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:
- 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.
- 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 commentaire
markus tripolt
le 28 Août 2024
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
Réponses (1)
the cyclist
le 28 Août 2024
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)])
0 commentaires
Voir également
Catégories
En savoir plus sur Descriptive Statistics and Visualization dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!