facet网格列表中的大数据

时间:2017-07-17 14:58:39

标签: r list dataframe ggplot2

我想制作一个很长的数据的facet网格图,它位于不同数据帧的列表中。以下是一些示例数据:

library(tidyverse)
library(ggplot2)

L <- list()
for (i in 1:10) {
  DATE  <-  seq( as.POSIXct("2016-01-01 21:00:00", tz="UTC"), 
            as.POSIXct("2016-02-01 21:00:00", tz="UTC"), 
            by = 600
            )

  V1  <-  round(runif(length(DATE)) - 0.3,0)
  L[[i]] <- tibble(DATE, V1)
}

names(L) <- LETTERS[1:10]

我真正需要的是facet_grid(),每行中的每个数据帧显示V1为1或0,如条形码或类似的东西。 我唯一的成功是将所有列表元素绑定到一个数据帧,并将每个列表元素的名称作为新列。这似乎有点迂回曲折。

for (i in 1:10) {
  L[[i]] <- mutate(L[[i]], list.name = names(L)[i] )
}

DF <- do.call(rbind.data.frame, L)

ggplot(DF) + 
  geom_step(aes(DATE, V1), size = 0.1, ) + 
  facet_grid(list.name ~ .)

Takes a long time and is not filled

我希望geom_step()情节的缩小程度与geom_area()一样(我知道在示例中很难看到)。还有另一种更适合的geom吗?由于我的数据更长,因此创建绘图需要数小时。有没有更好的方法在列表元素上创建facet_grid()?

1 个答案:

答案 0 :(得分:3)

如何使用geom_raster

DF <- map_df(L, I) %>% mutate(V1 = as.factor(V1))

ggplot(DF, aes(x = DATE, y = list.name, fill = V1)) + 
  geom_raster() +
  scale_fill_manual(values = c("white", "black"))