【问题标题】:box plot using column of different length使用不同长度列的箱线图
【发布时间】:2014-02-01 09:59:35
【问题描述】:

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

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))

但它没有工作...... 我能怎么做? 谢谢!

【问题讨论】:

    标签: r boxplot


    【解决方案1】:

    结合两个答案并扩展 Henrik 的答案,您还可以将 OT 组合在 boxplot() 中:

    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()
    

    【讨论】:

    • +1 表示传奇的努力。处理 R 基本情节中的图例总是具有挑战性的。
    • 感谢@agstudy。只是忘记了盒子,但没关系。 :)
    • 嗨洛基,感谢您的帮助!我尝试了你的代码,但是当我运行 dat.m &lt;- transform(dat.m,group=ifelse(grep('1|2|3','4|5|6','7|8|9','10|11|12','13|14|15','16|17|18'), + 'group1','group2','group3','group4','group5','group6')) 时(我的完整数据集中有 18 列,所以 OT1 到 OT18)我有这个错误Errore in ifelse(grep("1|2|3", "4|5|6", "7|8|9", "10|11|12", "13|14|15", : unused argument(s) ("group3", "group4", "group5", "group6")
    • 你可以尝试一些更通用的方法,例如:nr &lt;- nrow(dat);nc &lt;- ncol(dat);cols_per_grp &lt;- 3;grp &lt;- seq_len(nc/cols_per_grp);dat.m$group &lt;- rep(grp, each = nr * cols_per_grp)grp
    • 如果可能的话,我认为更改作为数据库读取的文本文件中的数据是最简单的。将其更改为“OT01”,“OT02,...OT09,OT10,OT11...然后它们应该正确订购
    【解决方案2】:

    使用R基本图对箱线图进行分组并不容易,最好在这里使用ggplot2。无论这里的困难是如何重新格式化您的数据并以长格式重塑它们。

        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))
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-05
        • 2020-06-26
        • 1970-01-01
        • 2017-10-06
        • 1970-01-01
        相关资源
        最近更新 更多