使用R将多个数据系列绘制到单个袋图中

时间:2015-04-07 21:04:41

标签: r visualization boxplot bagplot

让我们考虑包含在R中的aplpack库中的bagplot example。袋图是箱图的双变量推广,因此可以深入了解两个轴中数据点的分布。

行李箱示例: car data bagplot

示例代码:

  # example of Rousseeuw et al., see R-package rpart
  cardata <- structure(as.integer( c(2560,2345,1845,2260,2440,
   2285, 2275, 2350, 2295, 1900, 2390, 2075, 2330, 3320, 2885,
   3310, 2695, 2170, 2710, 2775, 2840, 2485, 2670, 2640, 2655,
   3065, 2750, 2920, 2780, 2745, 3110, 2920, 2645, 2575, 2935,
   2920, 2985, 3265, 2880, 2975, 3450, 3145, 3190, 3610, 2885,
   3480, 3200, 2765, 3220, 3480, 3325, 3855, 3850, 3195, 3735,
   3665, 3735, 3415, 3185, 3690, 97, 114, 81, 91, 113, 97, 97,
   98, 109, 73, 97, 89, 109, 305, 153, 302, 133, 97, 125, 146,
   107, 109, 121, 151, 133, 181, 141, 132, 133, 122, 181, 146,
   151, 116, 135, 122, 141, 163, 151, 153, 202, 180, 182, 232,
   143, 180, 180, 151, 189, 180, 231, 305, 302, 151, 202, 182,
   181, 143, 146, 146)), .Dim = as.integer(c(60, 2)), 
   .Dimnames = list(NULL, c("Weight", "Disp.")))
  bagplot(cardata,factor=3,show.baghull=TRUE,
    show.loophull=TRUE,precision=1,dkmethod=2)
  title("car data Chambers/Hastie 1992")
  # points of y=x*x
  bagplot(x=1:30,y=(1:30)^2,verbose=FALSE,dkmethod=2)

aplpack的bagplot似乎只支持为单个数据系列绘制“包”。更有趣的是在单个包图中绘制两个(或三个)数据系列,在视觉上比较数据系列的“包”可以深入了解数据系列的数据分布的差异。有谁知道这是否可以在R中完成(如果是,如何)?

1 个答案:

答案 0 :(得分:8)

如果我们修改了一些aplpack::bagplot代码,我们可以为ggplot2创建一个新的geom。然后我们可以用通常的ggplot2方式比较数据集中的组。这是一个例子:

library(ggplot2)
ggplot(iris, aes(Sepal.Length, Sepal.Width, 
                 colour = Species, fill = Species)) +
       geom_bag() +
       theme_minimal()

enter image description here

我们可以用bagplot显示点数:

ggplot(iris, aes(Sepal.Length, Sepal.Width, 
                     colour = Species, fill = Species)) +
           geom_bag() +
           geom_point() + 
           theme_minimal()

enter image description here

以下是geom_bag和修改后的aplpack::bagplot函数的代码:https://gist.github.com/benmarwick/00772ccea2dd0b0f1745