如何对一系列变量进行箱形图

时间:2014-04-08 17:42:15

标签: r matrix boxplot

我有一个大约有一百个变量的数据矩阵,我想做这些变量的箱形图。一个接一个地做它们是可能的,但是很乏味。我用于箱形图的代码是:

    boxplot(myVar ~ Group*Trt*Time,data=exp,col=c('red','blue'),frame.plot=T,las=2, ylab='Counts', at=c(1,2,3,4,6,7,8,9,11,12,13,14,16,17,18,19))

我开始逐一进行,但意识到必须有更好的选择。因此,boxplot调用在时间上只占用一个变量(我可能错了),所以我正在寻找一种方法来一次完成它。一个for循环?接下来,我想在绘图上打印当前变量(= colName)的名称,以使它们分开。

欣赏建议。 谢谢。 jd

2 个答案:

答案 0 :(得分:1)

为什么不尝试以下方法:

data(something)
panel.bxp <- function(x, ...)
{
    a <- par("a"); on.exit(par(a))
    par(a = c(0, 2, a[3:4]))
    boxplot(x, add=TRUE)
}

然后,要运行该功能,您可以尝试以下内容:

pairs(something, diag.panel = panel.bxp, text.panel = function(...){})

编辑:还有一个不错的link to an article here on R-bloggers which you might want to have a look at

答案 1 :(得分:0)

作为R的新手,我试图遵循我的'旧'思想 - 制作一个for循环。这就是我想出的。可能非常原始,因此,我很感激评论/建议。无论如何:循环:

    for (i in 1:ncol(final)) {
      #print(i)
      c <- colnames(final)[i]
      #print(c)
      b <- final[,i]
      #b <- t(b)
      #dim(b)
      #print(b)
      exp <- data.frame(Group,Trt,Time,b)
      #dim(exp)
      #print(exp)
      boxplot(b ~ Group*Trt*Time,data=exp,col=c('red','blue'),frame.plot=T, las=2, ylab='Counts',main=c, at=c(1,2,3,4,6,7,8,9,11,12,13,14,16,17,18,19))

    }

循环遍历数据矩阵'final',(48rows x 67cols)。拾取列标题c,它在boxplot调用中用作主标题。拿起数据列,b。使用在循环外部建立的Group,Trt和Time因子设置实验,并调用boxplot。 这似乎做我想要的。奇怪的是,Rstudio不允许将多于25个(大约)的图存储在图控制台中,因此我必须在几轮中运行此循环。 无论如何,抱歉回答我自己的问题。我怀疑,更好的解决方案非常受欢迎,因为我的方式很漂亮。