2016-08-15 116 views
3

我想用日期,工作日和時間作爲x軸標籤獲得很好的圖形。ggplot的軸標籤和極限值scale_x_datetime

test <- data.frame(date=seq(as.POSIXct("2012-02-09 00:00:00",tz="CET"),as.POSIXct("2012-02-11 00:00:00",tz="CET"),"hours"), 
value= runif(49)) 

ggplot() + geom_line(data=test, aes(x=as.POSIXct(date), y=value)) + 
theme(text=element_text(size=16), 
legend.text=element_text(size=16), 
axis.text=element_text(size=16, colour="black"), 
panel.background = element_rect(fill = 'white', colour = 'black'), 
axis.title.y = element_text(size=16, vjust = 0.3), 
axis.title.x = element_text(size=16, vjust = 0), 
legend.key=element_rect(fill="white")) + 
scale_x_datetime(breaks = date_breaks("1 days"), labels = date_format("%a-%d\n%H:%M", tz="CET"), 
,limits = c(as.POSIXct("2012-02-09 00:00:00 CET"),as.POSIXct("2012-02-11 00:00:00 CET"))) 

包括scale_x_datetime爲包含在它看起來像這樣的MWE:enter image description here

有幾個問題/問題:

1)我怎樣才能去除左,右的空白手邊?定義限制()並不成功。

2)如何設置顯示的時間(小時),換句話說,標籤放置在哪個時間戳?

3)當我改變時間戳這樣

test <- data.frame(date=seq(as.POSIXct("2012-02-09 00:59:00",tz="CET"),as.POSIXct("2012-02-11 00:59:00",tz="CET"),"hours"), 
value= runif(49)) 

所得積(S)仍然顯示以00分鐘時間戳記。有沒有辦法改變這個?

+1

我的猜測是使用'expand'和'breaks'參數將與前兩個問題提供幫助。 – aosmith

回答

5

如果您製作日期時間向量並將其提供給breaks參數,則您可以完全控制這些休息時間。下面我用seq做了這個。

設置expand = c(0, 0)停止ggplot給予額外的空間。

ggplot(data = test, aes(x = as.POSIXct(date), y = value)) + 
    geom_line() + 
    scale_x_datetime(
    breaks = seq(as.POSIXct("2012-02-09 00:59:00 CET"), 
       as.POSIXct("2012-02-11 00:59:00 CET"), "8 hours"), 
    labels = date_format("%a-%d\n%H:%M", tz = "CET"), 
    expand = c(0, 0), 
    limits = c(
     as.POSIXct("2012-02-09 00:00:00 CET"), 
     as.POSIXct("2012-02-11 00:00:00 CET") 
    ) 
) 
4

隨着限制,我得到一個警告消息:「除去含有缺失值(geom_path)9行」

我用expand由Richard的建議和下面是代碼和數字:

test <- data.frame(date=seq(as.POSIXct("2012-02-09 00:00:00",tz="CET"),as.POSIXct("2012-02-11 00:00:00",tz="CET"),"hours"), 
       value= runif(49)) 

ggplot() + geom_line(data=test, aes(x=as.POSIXct(date), y=value)) + 
    theme(text=element_text(size=16), 
     legend.text=element_text(size=16), 
     axis.text=element_text(size=16, colour="black"), 
     panel.background = element_rect(fill = 'white', colour = 'black'), 
     axis.title.y = element_text(size=16, vjust = 0.3), 
     axis.title.x = element_text(size=16, vjust = 0), 
     legend.key=element_rect(fill="white")) + 
    scale_x_datetime(breaks = date_breaks("8 hours"), 
        labels = date_format("%a-%d\n%H:%M", tz="CET"), 
        expand = c(0,0)) 

enter image description here