如何从同一个数据框创建多个箱线图?
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
我有一个这样的数据框:
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