How do I display different boxplot groups on the same figure in MATLAB 7.9 (R2009b)?
3 views (last 30 days)
Show older comments
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.
0 Comments
Answers (2)
Siddharth
on 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)
0 Comments
Tom Lane
on 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)
1 Comment
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!