boxplot(graphics)与bwplot(lattice)中的公式表示法

时间:2012-07-17 10:56:01

标签: r lattice boxplot

自昨天我发布了this question的答案以来,这一直在唠叨我。

考虑以下数据:

carpaint <- data.frame(paint = c(rep(c("blue", "black", "red"), 
                                     times=3)),
                       car1 = c(100, 138, 123, 143, 112, 
                                144, 343, 112, 334), 
                       car2 = c(111, 238, 323, 541, 328, 
                                363, 411, 238, 313), 
                       car3 = c(432, 123, 322, 342, 323, 
                                522, 334, 311, 452))

如果我想按颜色生成箱形图(忽略“car”的二级分组),我可以轻松地使用bwplot lattice中的公式表示法。

library(lattice)
bwplot(car1 + car2 + car3 ~ paint, data=carpaint)

Lattice Output

但是,要使用boxplot中的graphics得到类似的情节,公式表示法是不同的,所以我必须首先将数据转换为长格式然后绘制,如下所示:

carpaint.l = reshape(carpaint, direction="long", varying=2:4, sep="")
boxplot(car ~ paint, data=carpaint.l)

Graphics Output

问题:有没有办法在没有首先重塑数据的情况下从boxplot获取与graphics相同的情节,最好使用公式表示法? (这忽略了这样一个事实:这可能不是链接问题的OP想要的输出类型 - 他们仍然没有评论我的答案或@RomanLuštrik的问题。我只是想满足我的好奇心并学会更好地理解公式表示法。)

  
    

注意:提供替代方案肯定是受欢迎的,但我希望任何答案也能帮助我理解为什么有些选项正在运行而其他选项却没有。例如,为什么boxplot(as.matrix(carpaint[, 2:4]) ~ carpaint$paint)有效,boxplot(carpaint[, 2:4] ~ carpaint$paint)则无效。我发现这很奇怪,因为boxplot的文档有一些例子,它们在绘图之前将矩阵转换为数据帧,即使它似乎没有必要。

  

1 个答案:

答案 0 :(得分:2)

carpaint[, 2:4]是一个列表,而cbind(car1, car2, car3)as.matrix(carpaint[, 2:4])都有一个基础原子矢量表示。 boxplot的帮助页面说'y'参数需要是一个数字向量。 boxplot.formula使用splitboxplot(split(mf[[response]], mf[-response]), ...)grp参数由split回收,以匹配响应向量的长度。 split无法使用list / data.frame形式的三个向量执行此操作。