How do I display different boxplot groups on the same figure in MATLAB 7.9 (R2009b)?

1 vue (au cours des 30 derniers jours)
Shigeru Sasao
Shigeru Sasao le 13 Jan 2011
Commenté : Thomas Vargas le 19 Fév 2014
I would like to generate boxplots on the same figure for two different groups, observed and simulated temperatures for January to December with the x-axis being months. The two different groups need to be represented in different colors. The spacing between the boxplots also need to be user-definable.

Réponses (2)

Siddharth
Siddharth le 18 Jan 2011
There is no direct way of displaying boxplots for two different groups (in this example, observed and simulated temperatures) on the same figure. As a workaround, boxplots can be generated at defined positions for one group first. HOLD ON allows the boxplots for the second group to display on the same figure. In the following example, boxplots of the second group are 0.2 units away (user defined) from their corresponding blue boxplots. Example code:
% {Display boxplots for two different groups, observed and simulated temperatures from January to December on the same figure}% close all clc data = textread('bp.txt'); % Read user’s data file %{Assign the observed temperature to be Month_O and the simulated temperature to be Month_S}% Jan_O = data(:,1); Jan_S = data(:,2); Feb_O = data(:,3); Feb_S = data(:,4); Mar_O = data(:,5); Mar_S = data(:,6); Apr_O = data(:,7); Apr_S = data(:,8); May_O = data(:,9); May_S = data(:,10); Jun_O = data(:,11); Jun_S = data(:,12); Jul_O = data(:,13); Jul_S = data(:,14); Aug_O = data(:,15); Aug_S = data(:,16); Sep_O = data(:,17); Sep_S = data(:,18); Oct_O = data(:,19); Oct_S = data(:,20); Nov_O = data(:,21); Nov_S = data(:,22); Dec_O = data(:,23); Dec_S = data(:,24); f=figure; % Boxplot for the observed temperature from January to December Temp_O = [Jan_O, Feb_O, Mar_O, Apr_O, May_O, Jun_O, Jul_O, Aug_O, Sep_O, Oct_O, Nov_O, Dec_O]; position_O = 1:1:12; % Define position for 12 Month_O boxplots box_O = boxplot(Temp_O,'colors','b','positions',position_O,'width',0.18); set(gca,'XTickLabel',{' '}) % Erase xlabels hold on % Keep the Month_O boxplots on figure overlap the Month_S boxplots % Boxplot for the simulated temperature from January to December Temp_S = [Jan_S, Feb_S, Mar_S, Apr_S, May_S, Jun_S, Jul_S, Aug_S, Sep_S, Oct_S, Nov_S, Dec_S]; position_S = 1.3:1:12.3; % Define position for 12 Month_S boxplots box_S = boxplot(Temp_S,'colors','r','positions',position_S,'width',0.18); hold off % Insert texts and labels ylabel('Temperature') text('Position',[1.1,0],'String','January') text('Position',[2.1,0],'String','February') text('Position',[3.1,0],'String','March') text('Position',[4.1,0],'String','April') text('Position',[5.1,0],'String','May') text('Position',[6.1,0],'String','June') text('Position',[7.1,0],'String','July') text('Position',[8.1,0],'String','August') text('Position',[9.1,0],'String','September') text('Position',[10.1,0],'String','October') text('Position',[11.1,0],'String','November') text('Position',[12.1,0],'String','December') set(gca,'XTickLabel',{''}); % To hide outliers out_O = box_O(end,~isnan(box_O(end,:))); delete(out_O) out_S = box_S(end,~isnan(box_S(end,:))); delete(out_S)

Tom Lane
Tom Lane le 23 Jan 2011
Start with this, modify as appropriate:
month = {'Jan' 'Feb' 'Mar' 'Apr'}';
obsim = {'Obs' 'Sim'}';
n = 400;
boxplot(randn(n,1),{month(randi(4,n,1)),obsim(randi(2,n,1))},...
'factorsep',1,'factorgap',10)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by