嵌套矢量的geom_density图

时间:2019-10-04 13:52:22

标签: r ggplot2 tidyverse purrr

我有一列带有嵌套矢量的数据框。有什么想法如何使用嵌套向量中的值ggplot geom_density

如果我在整个数据帧中使用pivot_longer,我将获得2500万行,因此,如果可能的话,我宁愿避免这种情况。

library(ggplot2)
df = data.frame(a = rep(letters[1:5],length.out = 100), b = sample(LETTERS, 100, replace = T))
df[["c"]] = purrr::map(1:100, function(x) rnorm(100))
# works but too heavy for the actual implementation
ggplot(tidyr::unnest(df, c), aes(c, group = a)) + geom_density() + facet_wrap(vars(b))
# doesn't work
ggplot(df, aes(c, group = a)) + geom_density() + facet_wrap(vars(b))

1 个答案:

答案 0 :(得分:0)

不同的解决方案:分别准备每个图,然后使用gridExtra软件包重新布置图。

library(ggplot2)
df = data.frame(a = rep(letters[1:5],length.out = 100), b = sample(LETTERS, 100, replace = T))
df[["c"]] = purrr::map(1:100, function(x) rnorm(100))

lst_plot <- lapply(sort(unique(df$b)), function(x){
  data <- df[df$b == x,
  data <- purrr::map_dfr(seq(length(data$a)), ~ data.frame(a = data$a[.x], c = data$c[.x][[1]]))
  gg <- ggplot(data) +
    geom_density(aes(c, group = a)) +
    ylab(NULL)
  return(gg)
})

gridExtra::grid.arrange(grobs = lst_plot, ncol = 6, left = "density")

说实话,我不确定这对您的海量数据集的效果如何...