如何从同一个数据框创建多个箱线图?

how to create multiple boxplots from the same dataframe?

我有一个这样的数据框:

df <- data.frame(var_1 = c(1,2,3,4,5,6,7,8,9), 
                 var_2 = c(21,23,34,45,23,56,76,54,65),
                 var_3 = c(6,5,4,3,5,7,3,2,5),
                 label = c(1,1,1,2,1,2,2,1,2))

我想创建并排(或平铺)箱线图,第一个箱线图是

boxplot(var_1~label, df)

第二个箱线图是

boxplot(var_2~label, df)

等等。有没有办法做到这一点,而不必每次都输入箱线图命令?例如,一些命令迭代匹配所有列与 label 并为每个列绘制一个箱线图?

使用 ggplot::facet_wrap() 可以轻松地从一个数据集制作一组图形面板。但是,要使其正常工作,定义不同面板的变量必须位于单个列中。在这种情况下,这意味着您必须将数据的 'wide' 格式转换为 'long' 格式。为此,我建议 tidyr::pivot_longer()。最后一点是您需要将 label 视为 factor 否则您将不会像在 base R 中那样获得单独的框,因为我认为默认情况下将 x 变量转换为一个因子 which { ggplot2} 不会这样做(尽管它会给出信息性警告)。最后,如果你想为每个图设置单独的 y 轴,你可以在 facet_wrap().

中设置 scales = "free_y"
library(tidyverse)

df <- data.frame(var_1 = c(1,2,3,4,5,6,7,8,9), 
                 var_2 = c(21,23,34,45,23,56,76,54,65),
                 var_3 = c(6,5,4,3,5,7,3,2,5),
                 label = c(1,1,1,2,1,2,2,1,2))

df %>%
  pivot_longer(-label) %>%
  ggplot(aes(factor(label), value)) +
  geom_boxplot() +
  facet_wrap(vars(name), nrow = 1)

reprex package (v2.0.1)

创建于 2022-02-12