在中位数的基础上构造和排列箱线图

时间:2014-08-16 16:53:53

标签: r boxplot

我的表格中有我的数据,每列都有可变的观察结果,如下所示:

a   b   c   d   e   f   g
0   0   0   0   2   0   2
4   182 44  82  73  22  37
76  3   101 15  42  94  15
17  151 102 10  44  2   36
88  32  42  32  79  92  50
30  10  10  121 11  0   64
39  2   25  42  73  15  34
92  13  56  37  21  148 238
31  1   12  366 196 102 55
2   113 141 6   70  89  0
22  53  4   53  119 11  26
37  268 5   7   75  264 
10  2   33  29  40  179 
67  23  61  25  61  168 
111 21  36  32  47  70  
28  17  311 11  21  38  
10  63  52  17  71  15  
72  11  27  67  14  118 
17  84  92  1   58  14  
89  29      85  25  17  
20  8       40  67  95  
23  12      41  40  3   
324 3       13  18  27  
8           23  113 25  
22          3   165 13  
133             63      
12              31      
22              68      
65                      

我的eac专栏有不同数量的观察结果。

现在我可以做一个正常的箱线图构建:

d1<-read.table("file.txt",header=T)
boxplot(d1,outline=F)

但是在这里我希望我的盒子按照它们的中位数排列,而不是按照它们在我的数据框中出现的顺序排列。

任何建议?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以在绘制中位数之前对data.frame进行排序。然后boxplot将按照您的预期方式运作:

d1 <- read.table(header=TRUE, sep=";", text=
"a  ;b  ;c  ;d  ;e  ;f  ;g
0  ;0  ;0  ;0  ;2  ;0  ;2
4  ;182;44 ;82 ;73 ;22 ;37
76 ;3  ;101;15 ;42 ;94 ;15
17 ;151;102;10 ;44 ;2  ;36
88 ;32 ;42 ;32 ;79 ;92 ;50
30 ;10 ;10 ;121;11 ;0  ;64
39 ;2  ;25 ;42 ;73 ;15 ;34
92 ;13 ;56 ;37 ;21 ;148;238
31 ;1  ;12 ;366;196;102;55
2  ;113;141;6  ;70 ;89 ;0
22 ;53 ;4  ;53 ;119;11 ;26
37 ;268;5  ;7  ;75 ;264;
10 ;2  ;33 ;29 ;40 ;179;
67 ;23 ;61 ;25 ;61 ;168;
111;21 ;36 ;32 ;47 ;70 ;
28 ;17 ;311;11 ;21 ;38 ;
10 ;63 ;52 ;17 ;71 ;15 ;
72 ;11 ;27 ;67 ;14 ;118;
17 ;84 ;92 ;1  ;58 ;14 ;
89 ;29 ;   ;85 ;25 ;17 ;
20 ;8  ;   ;40 ;67 ;95 ;
23 ;12 ;   ;41 ;40 ;3  ;
324;3  ;   ;13 ;18 ;27 ;
8  ;   ;   ;23 ;113;25 ;
22 ;   ;   ;3  ;165;13 ;
133;   ;   ;   ;63 ;   ;
12 ;   ;   ;   ;31 ;   ;
22 ;   ;   ;   ;68 ;   ;
65 ;   ;   ;   ;   ;   ; ")

d2 <- d1[, names(sort(sapply(d1, median, na.rm=TRUE))) ]
boxplot(d2)