按组进行箱线绘制,然后在r中进行列

时间:2019-07-19 07:22:36

标签: r ggplot2 boxplot

如何制作箱形图,使箱形图中的每个框组都包含数据帧中的变量列。

例如使用mpg数据集:

head(mpg)

# A tibble: 234 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     compact
 2 audi         a4           1.8  1999     4 manual(m5) f        21    29 p     compact
 3 audi         a4           2    2008     4 manual(m6) f        20    31 p     compact
 4 audi         a4           2    2008     4 auto(av)   f        21    30 p     compact
 5 audi         a4           2.8  1999     6 auto(l5)   f        16    26 p     compact
 6 audi         a4           2.8  1999     6 manual(m5) f        18    26 p     compact
 7 audi         a4           3.1  2008     6 auto(av)   f        18    27 p     compact
 8 audi         a4 quattro   1.8  1999     4 manual(m5) 4        18    26 p     compact
 9 audi         a4 quattro   1.8  1999     4 auto(l5)   4        16    25 p     compact
10 audi         a4 quattro   2    2008     4 manual(m6) 4        20    28 p     compact
# ... with 224 more rows

因此,在每个cyl组(4、5、6、8)中,我希望对每个变量/列cty,hwy和displi有箱形图。

通常,将ggplot中的填充设置为一个因子变量,但在这种情况下,我有3个变量。

它应该看起来像这样:

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要将三个变量的数据转换为长格式。这是一个具有data.tablemelt函数的示例,但是您可以通过tydr轻松找到相同的示例:

library(ggplot2)
library(data.table)

mpg <- setDT(copy(mpg))
mpg_plot <- melt(mpg,measure.vars = c("cty","hwy","displ"),value.name = "val",variable.name = "var")

ggplot(mpg_plot, aes(x = as.factor(cyl),y = val,fill = var))+
  geom_boxplot()+
  theme_light()

enter image description here