2014-07-25 53 views
0

我有早上和下午的日期數據。我想創建一個geom_bar,將日期分爲AM和PM。現在我的函數有geom_bar重疊。我的繪圖功能如下:R:如何將天分爲半天

ggplot(DF, aes(x = DATE, y = value)) + geom_bar(position = "dodge", stat = "identity") + 
    + scale_fill_manual(values=unique(DF$DATE)) 

DF也有物業DT(代表日期時間),它具有年,月,日,時,分,秒。

DATE只是日期的年月日部分。

如果我把x = dt放入aes而不是x = DATE,我會得到非常瘦的geom_bars。如何將x_axis分成半天和dt爲半天,以便我有兩個跨越每個日期的大型geom_bars?

+1

你有時間嗎?如果是這樣,你可以做一個非常簡單的轉換爲'as.POSIXct(「2014-04-06 16:30」)> 12'。向我們展示您的數據或舉例! http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

回答

0

這裏我提出了根據您的描述

DF<-data.frame(
    dt=as.POSIXct(runif(500,as.numeric(as.POSIXct("2012-01-01")), 
     as.POSIXct(as.Date("2012-01-31"))), 
     origin="1970-01-01", tz="GMT"), 
    value = rnorm(500, 100, 6) 
) 
DF<-transform(DF, DATE=as.Date(dt)) 

現在,讓半天值一些示例數據,我會實際上只是做一些atrithmatic上的值,因爲它們是因爲存儲爲秒哨點日期。

DF<-transform(DF, HALFDAY=dt -(as.numeric(dt) %% (60*60*12))) 
DF<-transform(DF, PART=ifelse(as.numeric(HALFDAY) %% (60*60*24) > 0,"PM","AM")) 

基本上我只是截斷每個日期/時間到12小時的時間段。在GMT時間進行這些轉換很重要,所以您不必擔心本地時間變化。此外,與DATE這將是壞的做position=dodge因爲你沒有真正的分組。這隻會在彼此面前繪製值,如果您有一天的多次觀測,這可能不是您想要的。你真的想堆疊這些。因此,這裏有從這個數據的三種不同的地塊

ggplot(DF, aes(x = dt, y = value)) + 
    geom_bar(position="dodge", stat = "identity", width=60*60*2) + 
    ggtitle("dt") 

ggplot(DF, aes(x = DATE, y = value)) + 
    geom_bar(position="stack", stat = "identity") + 
    ggtitle("DATE") 

ggplot(DF, aes(x = HALFDAY, y = value, fill=PART)) + 
    geom_bar(position="stack", stat = "identity") + 
    ggtitle("HALFDAY") 

這給

enter image description here

當然你不必通過AM/PM轉色天半的

,但我喜歡它。