为geom_area添加缺少的data.frame值(ggplot2)

时间:2014-02-20 11:45:45

标签: r reshape reshape2

我想从摘要数据集中创建ggplot2 :: geom_area图,这些数据集在某些数据句点(月份)中缺少某些数据类别,例如:

require(ggplot2)
set.seed(1)
d = data.frame(x = rep(1:10,each=4), y = rnorm(40,10), cat=rep(c('A','B','C','D'), 10))
(d = d[-sample(1:40,10),]) # remove some rows
ggplot(d, aes(x, y, fill=cat)) + geom_area()

enter image description here

Ggplot的堆积区域图对缺失值的反应不好,所以我们似乎需要在data.frame中添加零条目。我能想到的最佳方式(除非有更好的建议吗?)是reshape2::dcast它,将NA转换为零并重新形成。但我无法弄清楚正确的配方。感谢能够理解重塑的人的帮助(2)。

require(reshape2)
dcast(d, x ~ cat)  # right direction but missing the data
    x    A    B    C    D
1   1    A    B    C    D
2   2 <NA>    B    C <NA>
3   3    A    B    C    D
4   4 <NA>    B    C <NA>
5   5    A <NA>    C    D
6   6    A    B    C    D
7   7 <NA>    B    C <NA>
8   8    A    B    C    D
9   9 <NA>    B <NA>    D
10 10    A    B <NA>    D

1 个答案:

答案 0 :(得分:3)

# Expand the data.frame
p.data <- merge(d,
                expand.grid(x=unique(d$x),
                            cat=unique(d$cat),
                            stringsAsFactors=F),
                all.y=T)

# Fill NA values with zeros
p.data$y[is.na(p.data$y)] <- 0

# Plot the graph
ggplot(p.data, aes(x, y, fill=cat)) +
    geom_area()

enter image description here