1

创建箱线图时,是否有一种聪明的方法可以只保留 n 个最大的组(计数)?

library(tidyverse)

head(mpg)

# A tibble: 6 x 11
  manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class 
  <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr> 
1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compa~
2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compa~
3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compa~
4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compa~
5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compa~
6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compa~

mpg %>% 
  count(manufacturer, sort=TRUE)

# A tibble: 15 x 2
   manufacturer     n
   <chr>        <int>
 1 dodge           37
 2 toyota          34
 3 volkswagen      27
 4 ford            25
 5 chevrolet       19
 6 audi            18
 7 hyundai         14
 8 subaru          14
 9 nissan          13
10 honda            9
11 jeep             8
12 pontiac          5
13 land rover       4
14 mercury          4
15 lincoln          3

这是一个情节。我想只保留上表中的前 5 个制造商。

mpg %>% ggplot()+
  geom_boxplot(aes(displ, manufacturer))

在此处输入图像描述

4

1 回答 1

1

您需要做的是在ggplot调用之前提取 N 个想要的制造商并将它们传递给scale_y_discrete(limits = ...)limits将子集想要的变量并仅绘制它们)。

library(tidyverse)

nWanted <- 5
foo <- head(count(mpg, manufacturer, sort = TRUE), nWanted)$manufacturer
# [1] "dodge"      "toyota"     "volkswagen" "ford"       "chevrolet"     

ggplot(mpg) +
    geom_boxplot(aes(displ, manufacturer)) +
    scale_y_discrete(limits = foo)

在此处输入图像描述

更正确的解决方案是(即,将分类变量传递给 x 轴,然后翻转坐标):

ggplot(mpg) +
    geom_boxplot(aes(manufacturer, displ)) +
    coord_flip() +
    scale_x_discrete(limits = foo)
于 2019-02-20T13:54:17.553 回答