我想从摘要数据集中创建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()
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
答案 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()