56

geom_bar()以下の時系列の例でデータが欠落している場合に一定の幅を設定する方法はありますか?運が悪かったので設定widthしてみました。aes()コード例の下のプロットで、2011年5月と2011年6月のバーの幅を比較します。

colours <- c("#FF0000", "#33CC33", "#CCCCCC", "#FFA500", "#000000" )
iris$Month <- rep(seq(from=as.Date("2011-01-01"), to=as.Date("2011-10-01"), by="month"), 15)

colours <- c("#FF0000", "#33CC33", "#CCCCCC", "#FFA500", "#000000" )
iris$Month <- rep(seq(from=as.Date("2011-01-01"), to=as.Date("2011-10-01"), by="month"), 15)
d<-aggregate(iris$Sepal.Length, by=list(iris$Month, iris$Species), sum)
d$quota<-seq(from=2000, to=60000, by=2000)
colnames(d) <- c("Month", "Species", "Sepal.Width", "Quota")
d$Sepal.Width<-d$Sepal.Width * 1000
g1 <- ggplot(data=d, aes(x=Month, y=Quota, color="Quota")) + geom_line(size=1)
g1 + geom_bar(data=d[c(-1:-5),], aes(x=Month, y=Sepal.Width, width=10, group=Species, fill=Species), stat="identity", position="dodge") + scale_fill_manual(values=colours)

プロット

4

3 に答える 3

32

最も簡単な方法は、すべての組み合わせが存在するようにデータ セットを補足することNAです。より簡単な例を挙げると(あなたのものには多くの不要な機能があるため):

dat <- data.frame(a=rep(LETTERS[1:3],3),
                  b=rep(letters[1:3],each=3),
                  v=1:9)[-2,]

ggplot(dat, aes(x=a, y=v, colour=b)) +
  geom_bar(aes(fill=b), stat="identity", position="dodge")

ここに画像の説明を入力

これは、回避しようとしている動作を示しています。グループ「B」にはグループ「a」が存在しないため、バーが広くなります。datと のすべての組み合わせを含むデータフレームを補足abます。

dat.all <- rbind(dat, cbind(expand.grid(a=levels(dat$a), b=levels(dat$b)), v=NA))

ggplot(dat.all, aes(x=a, y=v, colour=b)) +
  geom_bar(aes(fill=b), stat="identity", position="dodge")  

ここに画像の説明を入力

于 2012-06-13T19:16:22.683 に答える