2017-05-16 35 views
1

下面是一个例子数据:如何制作线和点图的日期和时间的范围r中

> WakeTime <- strptime(c("2017/5/1 08:12", "2017/5/1 08:30", "2017/5/2 
08:00", "2017/5/2 04:50"), format = "%Y/%m/%d %H:%M") 
> SleepTime <- strptime(c("2017/5/1 20:30", "2017/5/1 21:13", "2017/5/2 
22:15", "2017/5/3 01:00"), format = "%Y/%m/%d %H:%M") 

> timetable <- data.frame(WakeTime,SleepTime);timetable 
      WakeTime   SleepTime 
1 2017-05-01 08:12:00 2017-05-01 20:30:00 
2 2017-05-01 08:30:00 2017-05-01 21:13:00 
3 2017-05-02 08:00:00 2017-05-02 22:15:00 
4 2017-05-02 04:50:00 2017-05-03 01:00:00 

我试图汲取从WakeTimeSleepTime线的图,其中x是24小时,y是月和日。我尝试了很多方法,但仍然遇到了几个小时的麻烦。

如果你需要额外的代码:

> WMonthDay <- as.Date(WakeTime,format = "%b/%d") 
> SMonthDay <- as.Date(SleepTime,format = "%b/%d") 
> Whm <- format(WakeTime, "%H:%M") 
> Shm <- format(SleepTime, "%H:%M") 
> Supertimetable <- data.frame(WMonthDay,SMonthDay,Whm,Shm);Supertimetable 
    WMonthDay SMonthDay Whm Shm 
1 2017-05-01 2017-05-01 08:12 20:30 
2 2017-05-01 2017-05-01 08:30 21:13 
3 2017-05-02 2017-05-02 08:00 22:15 
4 2017-05-02 2017-05-03 04:50 01:00 

附:无论如何,WakeTimeSleepTime作为两个不同的颜色点在同一个阴谋?

回答

3

使用这些辅助功能

library(hms) 
date_only <- function(x) 
    as.Date(strftime(x, "%Y-%m-%d")) 
time_only <- function(x) 
    as.hms(x-date_only(x)) 

你可以做这样的事情

ggplot(timetable) + 
geom_segment(aes(x=time_only(WakeTime), xend=time_only(SleepTime), 
    y=date_only(WakeTime), yend=date_only(SleepTime))) + 
geom_point(aes(x=time_only(WakeTime), y=date_only(WakeTime)), col="green") + 
geom_point(aes(x=time_only(SleepTime), y=date_only(SleepTime)), col="blue") + 
scale_x_time() + 
scale_y_date() + 
labs(x="Time", y="Date") 

enter image description here

+0

我得到了这样的警告:'警告消息: 1:在as.hms(X - date_only(x)): “ - ”的不兼容方法(“-.POSIXt”,“ - Date”)' –

+0

这只是一个警告。如果你愿意,我想你可以做'time_only < - function(x)as.hms(x-as.POSIXct(date_only(x)))''。 – MrFlick

+0

太好了。这是完美的!谢谢。 –

相关问题