我想制作一个很长的数据的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 ~ .)
我希望geom_step()
情节的缩小程度与geom_area()
一样(我知道在示例中很难看到)。还有另一种更适合的geom吗?由于我的数据更长,因此创建绘图需要数小时。有没有更好的方法在列表元素上创建facet_grid()?
答案 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"))