2017-08-04 90 views
1

我剛剛學習ggplot,所以我很抱歉,如果這是一個非常基本的問題。我有一些年份彙總的數據,有幾種不同的特性可供選擇(以下代碼將生成示例數據)。我試圖展示幾個不同的圖表:一個顯示給定度量標準的整體數據,然後是一對夫婦顯示相同的度量標準,但不合適。理想情況下,我想製作一次劇情,然後爲每個單獨的圖表調用geom層。我確實有一些我希望它在代碼中看起來如何的例子。ggplot2多個時間序列圖

我開始認爲這是一個數據結構問題,但真的無法弄清楚。

第二個問題 - 我的年被格式化爲整數,是在這裏做的最好方法,還是應該將它們轉換爲日期?

library(data.table) 
library(ggplot2) 

#Generate Sample Data - Yearly summarized data 
BaseData <- data.table(expand.grid(dataYear = rep(2010:2017), 
            Program = c("A","B","C"), 
            Indicator = c("0","1"))) 

set.seed(123) 
BaseData$Metric1 <- runif(nrow(BaseData),min = 10000,100000) 
BaseData$Metric2 <- runif(nrow(BaseData),min = 10000,100000) 
BaseData$Metric3 <- runif(nrow(BaseData),min = 10000,100000) 


BP <- ggplot(BaseData, aes(dataYear,Metric1)) 

BP + geom_area() #overall Aggregate 
BP + geom_area(position = "stack", aes(fill = Program)) #Stacked by Program 
BP + geom_area(position = "stack", aes(fill = Indicator)) #stacked by Indicator 

#How I want them to look 

##overall Aggregate 
BP.Agg <- BaseData[,.(Metric1 = sum(Metric1)), 
        by = dataYear] 

ggplot(BP.Agg,aes(dataYear, Metric1))+geom_area() 


##Stacked by Program 
BP.Pro <- BaseData[,.(Metric1 = sum(Metric1)), 
        by = .(dataYear, 
          Program)] 

ggplot(BP.Pro,aes(dataYear, Metric1, fill = Program))+geom_area(position = "stack") 


##stacked by Indicator 
BP.Ind <- BaseData[,.(Metric1 = sum(Metric1)), 
        by = .(dataYear, 
          Indicator)] 

ggplot(BP.Ind,aes(dataYear, Metric1, fill = Indicator))+geom_area(position = "stack") 

回答

0

我是對的,這是一個簡單的修復。我應該使用stat_summary而不是geom_area,下面是要添加的正確圖層:

BP + stat_summary(fun.y = sum, geom = "area") 
BP + stat_summary(fun.y = sum, geom = "area", position = "stack", aes(fill = Program, group = Program)) 
BP + stat_summary(fun.y = sum, geom = "area", position = "stack", aes(fill = Indicator, group = Indicator))