ggplot:从不同长度的元素列表中绘制geom_boxplot

时间:2015-05-31 17:18:24

标签: r ggplot2 boxplot

我将这些元素的时间序列分组在长度为t的列表中。

series <- seq(1:10)

lst <- list()

set.seed(28100)
for (t in series) {
  lst[[t]] <- sample(c(1:20, NA), sample(1:20, 1))
}

列表元素的长度可以变化;在列表中创建二维data.frame显然不可行:

lst
# [[1]]
# [1]  6  7 12  4 15 20  3
# 
# [[2]]
# [1] 14 18  8 20 NA  6 19  4  9  5  1 13  3 10 12 15
# [17] 11 17
# 
# ...
# 
# [[9]]
# [1]  3  9 12  8 16 15 10 19 14 11  6  2 20 13  5 18
# 
# [[10]]
# [1]  4 20 10  2 12  5 19  1 NA 11 14  7 17

我仍然希望使用geom_boxplot()创建包含我的发行版异常值的时间序列箱图(例如this)。

1 个答案:

答案 0 :(得分:1)

如果您试图在x轴上绘制系列并在y轴上绘制采样值(我将它们称为 y ),那么创建数据框列表并堆叠它们以获得数据结构ggplot的需要。例如:

library(ggplot2)

# Modify lst into data frames of varying dimension
lst <- lapply(series, function(x) {
  data.frame(series = factor(x, levels = series),
             y = lst[[x]])
})

# Stack the data frames
lst <- do.call(rbind, lst)

# Make the plot
ggplot(lst, aes(x = series, y = y)) +
  geom_boxplot()