ggplot2-несколько Boxplots из источников разной длины

У меня есть несколько разных векторов различной длины, для которых я хотел бы генерировать бок о бок boxplots с помощью ggplot2. Это относительно прямолинейно связано с базовой системой построения графиков. Однако ggplot2 принимает в качестве входных данных только один фрейм данных, который трудно создать из данных разной длины.

a <- rnorm(10)
b <- rnorm(100)
c <- rnorm(1000)
boxplot(a, b, c)

Q: Как правильно рисовать boxplots с помощью ggplot2, используя данные разной длины?


1 ответов


ggplot использует аккуратные длинные фреймы данных с группами (например, a, b или c), сохраненными как отдельные столбцы. В вашем примере вы можете создать фрейм данных с 1110 строками (10 + 100 + 1000) и два столбца (значение и группа), например:

# Make individual data frames
a <- data.frame(group = "a", value = rnorm(10))
b <- data.frame(group = "b", value = rnorm(100))
c <- data.frame(group = "c", value = rnorm(1000))

# Combine into one long data frame
plot.data <- rbind(a, b, c)

#   group      value
# 1     a  0.2322682
# 2     a -0.9681992
# ...
# 101   b  0.3422354
# 102   b  0.3495342
# ...
# 1001  c -0.6839231
# 1002  c -1.4329843

# Plot
library(ggplot2)
ggplot(plot.data, aes(x=group, y=value, fill=group)) + geom_boxplot()

Example boxplot