使用不同长度的列的框图

时间:2014-02-01 09:59:36

标签: r boxplot

我想做一些箱形图,但是每列的数据都有不同的行数。 我的数据如下:

OT1     OT2     OT3     OT4     OT5     OT6
22,6130653  16,6666667  20,259481   9,7431602   0,2777778   16,0678643
21,1122919  32,2946176  11,396648   10,9458023  4,7128509   10,8938547
23,5119048  19,5360195  23,9327541  39,5634921  0,6715507   12,2591613
16,9880885  39,5365943  7,7568134   22,7453205  3,6410445   11,7610063
            32,768937   25,2897351  9,6288027   4,1629535   3,7251656
            40,7819933              15,6320021  5,9171598   
            23,7961828              14,3728125  2,1887585

我想为每一列(OT1,OT2 ......)制作一个箱形图,但前三个和后三个组合在一起。 我试过了:

>mydata <- read.csv('L5.txt', header = T, sep = "\t")
>mydata_t <- t(mydata)
>boxplot(mydata_t, ylab = "OTU abundance (%)",las=2, at=c(1,2,3 5,6,7))

但它不起作用...... 我能怎么做? 谢谢!

3 个答案:

答案 0 :(得分:3)

使用R基本图分组箱图不容易,最好在此使用ggplot2。无论遇到什么困难,如何重新格式化数据并以长格式重塑它们。

enter image description here

    dat <- read.table(text='OT1     OT2     OT3     OT4     OT5     OT6
22,6130653  16,6666667  20,259481   9,7431602   0,2777778   16,0678643
21,1122919  32,2946176  11,396648   10,9458023  4,7128509   10,8938547
23,5119048  19,5360195  23,9327541  39,5634921  0,6715507   12,2591613
16,9880885  39,5365943  7,7568134   22,7453205  3,6410445   11,7610063
            32,768937   25,2897351  9,6288027   4,1629535   3,7251656
            40,7819933              15,6320021  5,9171598   
            23,7961828              14,3728125  2,1887585',header=TRUE,fill=TRUE)
dat = sapply(dat,function(x)as.numeric(gsub(',','.',x))) 
dat.m <- melt(dat) 
dat.m <- transform(dat.m,group=ifelse(grepl('1|2|3',Var2),
   'group1','group2')) 
 ggplot(dat.m)+ 
     geom_boxplot(aes(x=group,y=value,fill=Var2))

答案 1 :(得分:3)

或者boxplot使用@ agstudy的'dat':

df <- melt(dat)
boxplot(value ~ Var2, data = df, at = 1:6 + c(0.2, 0, -0.2))

enter image description here

答案 2 :(得分:3)

结合答案和扩展Henrik的答案,你也可以在boxplot()中将OT组合在一起:

enter image description here

dat <- read.table(text='OT1     OT2     OT3     OT4     OT5     OT6
22,6130653  16,6666667  20,259481   9,7431602   0,2777778   16,0678643
21,1122919  32,2946176  11,396648   10,9458023  4,7128509   10,8938547
23,5119048  19,5360195  23,9327541  39,5634921  0,6715507   12,2591613
16,9880885  39,5365943  7,7568134   22,7453205  3,6410445   11,7610063
            32,768937   25,2897351  9,6288027   4,1629535   3,7251656
            40,7819933              15,6320021  5,9171598   
            23,7961828              14,3728125  2,1887585',header=TRUE,fill=TRUE)

dat <- sapply(dat,function(x)as.numeric(gsub(',','.',x)))
dat.m <- melt(dat) 
dat.m <- transform(dat.m,group=ifelse(grepl('1|2|3','4|5|6'),
                                      'group1','group2')) 
as.factor(dat.m$X2)
 boxplot(dat.m$value~dat.m$X2,data=dat.m, 
        axes = FALSE, 
        at = 1:6 + c(0.2, 0, -0.2), 
        col = rainbow(6))
axis(side = 1, at = c(2, 5), labels = c("Group_1", "Group_2"))
axis(side = 2, at = seq(0, 40, by = 10))
legend("topright", legend = c("OT1", "OT2", "OT3", "OT4", "OT5", "OT6"), fill = rainbow(6))
abline(v = 3.5, col = "grey")
box()