Matlab boxplot for Multiple Groups(多組數據的箱線圖)


在畫之前首先介紹一下 Matlab boxplot下面這段說明內容來自 http://www.plob.org/2012/06/10/2153.html
 

由於matlab具有強大的計算功能,用其統計數據功能優點顯而易見,這里分享使用matlab中的boxplot的一些技巧,供大家參考。

Matlab boxplot命令

格式如下

boxplot(X)產生矩陣X的每一列的盒圖和“須”圖,“須”是從盒的尾部延伸出來,並表示盒外數據長度的線,如果“須”的外面沒有數據,則在“須”的底部有一個點。 www.iLoveMatlab.cn

boxplot(X,notch)當notch=1時,產生一凹盒圖,notch=0時產生一矩箱圖。

boxplot(X,notch,'sym')sym表示圖形符號,默認值為“+”。

boxplot(X,notch,'sym',vert) %當vert=0時,生成水平盒圖,vert=1時,生成豎直盒圖(默認值vert=1)。 Matlab中文論壇

boxplot(X,notch,'sym',vert,whis) %whis定義“須”圖的長度,默認值為1.5,若whis=0則boxplot函數通過繪制sym符號圖來顯示盒外的所有數據值。

箱線圖(Boxplot)也稱箱須圖(Box-whisker Plot),是利用數據中的五個統計量:最小值、第一四分位數、中位數、第三四分位數與最大值來描述數據的一種方法,它也可以粗略地看出數據是否具有有對稱性,分布的分散程度等信息,特別可以用於對幾個樣本的比較。

畫圖步驟:

1、畫數軸,度量單位大小和數據批的單位一致,起點比最小值稍小,長度比該數據批的全距稍長。

2、畫一個矩形盒,兩端邊的位置分別對應數據批的上下四分位數(Q1和Q3)。在矩形盒內部中位數(Xm)位置畫一條線段為中位線。

3、在Q3+1.5IQR(四分位距)和Q1-1.5IQR處畫兩條與中位線一樣的線段,這兩條線段為異常值截斷點,稱其為內限;在F+3IQR和F-3IQR處畫兩條線段,稱其為外限。處於內限以外位置的點表示的數據都是異常值,其中在內限與外限之間的異常值為溫和的異常值(mild outliers),在外限以外的為極端的異常值(extreme outliers)。

4、從矩形盒兩端邊向外各畫一條線段直到不是異常值的最遠點,表示該批數據正常值的分布區間。

5、用“〇”標出溫和的異常值,用“*”標出極端的異常值。相同值的數據點並列標出在同一數據
線位置上,不同值的數據點標在不同數據線位置上。至此一批數據的箱線圖便繪出了。統計軟件繪制的箱線圖一般沒有標出內限和外限。:

例子1:

clear

x1=[1,2,2,3,5,3];

x2=[2,5,4,5,8,6];

g1={x1,x2};

%group2

x3=[2,8,9,2,1,6];

x4=[5,4,3,22,11,6];

g2={x3,x4};

%group3

x5=[10,12,22,4];

x6=[12,15,4,25];

g3={x5,x6};

G=cat(1,g1,g2,g3); 

class={1,2,3}

positions = [1 1.25 2 2.25 3 3.25];

boxplot(G,class, 'positions', positions);

set(gca,'xtick',[mean(positions(1:2)) mean(positions(3:4)) mean(positions(5:6)) ])

set(gca,'xticklabel',{'Group1','Group2','Group3'})

color = ['c', 'y', 'c', 'y'];

h = findobj(gca,'Tag','Box');

for j=1:length(h)

   patch(get(h(j),'XData'),get(h(j),'YData'),color(j),'FaceAlpha',.5);

end

c = get(gca, 'Children');

hleg1 = legend(c(1:2), 'Feature1', 'Feature2' );

  

 

 

例2: 

Matlab <wbr>boxplot <wbr>for <wbr>Multiple <wbr>Groups(多組數據的箱線圖)

數據:BoxPlotData.mat,包含X4058_300和X4058_400兩個變量數據

X4058_300=[
0.6010 0.6847 0.6798 0.6700 0.6059 0.6749 0.6453 0.6502 0.6847 0.6700 0.5813 0.6404 0.6749 0.6749 0.6650 0.6502 0.6749 0.6305 0.6355 0.7143; 
0.6207 0.6650 0.6847 0.6749 0.5961 0.6601 0.6404 0.6700 0.6946 0.6897 0.6059 0.6749 0.6650 0.6749 0.6453 0.6502 0.6700 0.6256 0.6256 0.6995 ;
0.6601 0.6700 0.7340 0.7044 0.6355 0.7241 0.6798 0.6897 0.7094 0.6946 0.6256 0.6798 0.7044 0.7389 0.6700 0.6749 0.7143 0.6650 0.6059 0.6502; 
0.7291 0.6108 0.7192 0.7537 0.5862 0.6355 0.6010 0.7143 0.6946 0.6897 0.6453 0.7685 0.7635 0.6404 0.7094 0.7143 0.6108 0.6552 0.7389 0.6897;
0.7044 0.7044 0.7044 0.6847 0.7143 0.6700 0.6650 0.7438 0.7143 0.7143 0.6601 0.6502 0.6995 0.7586 0.7488 0.6897 0.6700 0.6946 0.6897 0.6897; 
0.6355 0.6847 0.7291 0.7143 0.6700 0.7438 0.6700 0.6650 0.7192 0.7044 0.6355 0.6847 0.6749 0.7094 0.6798 0.6453 0.7241 0.6946 0.6108 0.6700 ]

 

X4058_400 =[
0.5922 0.6408 0.6408 0.5825 0.6505 0.6796 0.6214 0.6796 0.6311 0.6505 0.5825 0.6699 0.6602 0.6602 0.7282 0.6602 0.6699 0.7087 0.6505 0.6505 ;
0.6117 0.6311 0.6602 0.6117 0.6505 0.6796 0.6214 0.6990 0.6990 0.6311 0.5922 0.6796 0.6699 0.6408 0.7184 0.6505 0.6602 0.7087 0.6214 0.6796; 
0.6311 0.7184 0.7573 0.6893 0.6311 0.6990 0.6408 0.7087 0.7379 0.6990 0.6699 0.7184 0.6699 0.6699 0.7184 0.6893 0.6699 0.6990 0.6214 0.6990; 
0.6602 0.6311 0.7379 0.6408 0.5922 0.7282 0.5728 0.7087 0.7379 0.7379 0.5728 0.7767 0.7476 0.6214 0.7476 0.6214 0.7379 0.6893 0.6019 0.6699 ;
0.6214 0.7476 0.6311 0.6699 0.6699 0.6311 0.6214 0.6699 0.6796 0.6505 0.5922 0.6796 0.7184 0.6893 0.8058 0.6699 0.6602 0.7184 0.6796 0.6796 ;
0.6117 0.6893 0.7282 0.6602 0.7573 0.7379 0.6408 0.7184 0.7087 0.7087 0.6990 0.6796 0.6214 0.6311 0.7573 0.6602 0.7379 0.6796 0.6796 0.7282 ;]

  

 

Matlab程序:

clear

load BoxPlotData

x01=X4058_300;
x02=X4058_400;

x1 = [x01(1,:);x02(1,:)]';
x2 = [x01(2,:);x02(2,:)]';
x3 = [x01(3,:);x02(3,:)]';
x4 = [x01(4,:);x02(4,:)]';
x5 = [x01(5,:);x02(5,:)]';
x6 = [x01(6,:);x02(6,:)]';
f=figure(1)
x = [x1;x2;x3;x4;x5;x6]; x = x(:);
g1 = [ones(size(x1)); 2*ones(size(x2)); 3*ones(size(x3));4*ones(size(x4));...
    5*ones(size(x5));6*ones(size(x6));]; g1 = g1(:);
g2 = repmat(1:2,120,1); g2 = g2(:);
positions = [[1:6],[7:12]];
bh=boxplot(x, {g2,g1},'notch','on','whisker',1,'colorgroup',g1, 'factorgap',[8 1],'symbol','.','outliersize',4,'widths',0.6,'positions',positions)
xlabel('Training data size');
ylabel('Mean zero-one error')
grid on
set(gca,'YLim',[0.45,0.85],'gridLineStyle', '-.');

set(bh,'linewidth',1.2);

color = ['c', 'y', 'g', 'b','o', 'b','c', 'y', 'g', 'b','o', 'b'];
h = findobj(gca,'Tag','Box');
mk=findobj(gca,'tag','Outliers'); % Get handles for outlier lines.
set(mk,'Marker','o'); % Change symbols for all the groups.
 for j=1:length(h)/2
    patch(get(h(j),'XData'),get(h(j),'YData'),color(4),'FaceAlpha',0.01*j);
 end
  for j=(length(h)/2+1):length(h)
    patch(get(h(j),'XData'),get(h(j),'YData'),color(4),'FaceAlpha',0.01*(j-length(h)/2));
 end

set(gca,'xtick',[7.5])
% set(gca,'xtick',[]);
set(gca,'XTickLabel',{' '})
 
% Create textbox
annotation(f,'textbox',...
    [0.3 0.075 0.035 0.075],...
    'String',{'300'},...
    'FitBoxToText','off',...
    'EdgeColor','none');

% Create textbox
annotation(f,'textbox',...
    [0.7 0.075 0.035 0.075],...
    'String','400',...
    'FitBoxToText','off',...
    'EdgeColor','none');

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM