2016-02-28 159 views
4

我希望下圖中的x軸從06:00開始到22:00結束,每隔4小時休息一次。然而,我無法弄清楚以下幾點。用ggplot在x軸上顯示有限的時間範圍

a)如何在06:00之前在06:00之前開始x軸,而06:00之前沒有任何空白空間。

b)如何在22:00之後使x軸結束,而在22:00之後沒有任何空白空間。現在它甚至不顯示22:00

c)如何每4小時休息一次。

d)如何爲y軸指定一個標籤(目前它只是X4,列名)。

我試了幾件事,但沒有成功。一些示例數據:

range <- seq(as.POSIXct("2015/4/18 06:00"),as.POSIXct("2015/4/18 22:00"),"mins") 

df <- data.frame(matrix(nrow=length(range),ncol=4)) 
df[,1] <- c(1:length(range)) 
df[,2] <- 2*c(1:length(range)) 
df[,3] <- 3*c(1:length(range)) 
df[,4] <- range 

重塑:

library(reshape2) 
df2 <- melt(df,id="X4") 

圖:

library(ggplot2) 
ggplot(data=df2,aes(x=X4,y=value,color=variable)) + geom_line()+ 
    scale_y_continuous(expand=c(0,0)) + 
    coord_cartesian(xlim=c(as.POSIXct("2015/4/18 06:00:00"),as.POSIXct("2015/4/18 22:00:00"))) 

這使得圖形看起來就像這樣: enter image description here

任何想法?

回答

4

這是一些應該幫助你的代碼。這可以使用scale_x_datetime輕鬆完成。

## desired start and end points 
st <- as.POSIXct("2015/4/18 06:00:00") 
nd <- as.POSIXct("2015/4/18 22:00:00") 

## display data for given time range 
ggplot(data = df2, aes(x = X4, y = value, color = variable)) + 
    geom_line() + 
    scale_y_continuous("Some name", expand = c(0, 0)) + 
    scale_x_datetime("Some name", expand = c(0, 0), limits = c(st, nd), 
        breaks = seq(st, nd, "4 hours"), 
        labels = strftime(seq(st, nd, "4 hours"), "%H:%S")) 

ggplot

+0

完美的作品!謝謝。 – Joseph