在R上绘制时间数据:数据从绘图中消失,第二个我对x或y轴添加限制

时间:2017-02-20 14:00:32

标签: r

我想描绘我每天睡觉的时间与日期的关系。我刚开始使用日期值,但是我在绘制日期和时间方面看了很多,并设法至少绘制了数字数据与1之类的日期

但是,我无法通过时间和日期值来实现此功能。如果我简单地绘制时间与日期没有任何限制,我得到[2](我添加了链接到底部,因为我显然不能添加超过1)

但是当我添加限制时,即使数据应该符合[3]中的限制,这些点也会消失。

我的数据是格式(有更多列,但我在这里排除它们):

/home/User3/backup/Documents

这是我的代码:

Date,Hours.Bio,Sleep
17-Feb,0.5,01:30
18-Feb,1.16,01:30
19-Feb,1.5,03:00

所以上述工作虽然我确信有更简单的方法。但是,这不起作用:

#LOAD DATA
progress <- read.csv("../Data/Progress.csv")
progress$Date <- as.Date(progress$Date, format="%d-%b")
progress$Sleep <- as.POSIXct(progress$Sleep, format ="%H:%M") 
#It just doesn't work with as.Date I don't know why
#DATES AND TIME LIMITS FOR PLOTS
StartDate <- as.Date("17/02/2017", format="%d/%m/%Y")
DateSeq <- seq(StartDate, by = "day", length.out = 30)
StartSleep <- as.POSIXct("22:00", format="%H:%M")
SleepSeq <- seq.POSIXt(StartSleep, by = "hour", length.out = 7)
#PLOT (MONTH) BIOLOGY
plot(Hours.Bio~Date, data=progress, xlim=c(DateSeq[1],      
DateSeq[length(DateSeq)]), ylim=c(0, 6), type="l", xlab="Date", 
xaxt='n', ylab="Number of hours", main="Amount of biology studied per day")
axis.Date(1, at=DateSeq, format="%d/%m", las=2, cex.axis=0.9)
#PLOT (MONTH) SLEEP
plot(Sleep~Date, data=progress, type="l", xaxt="n")
axis.Date(1, at=DateSeq, format="%d/%m", las=2, cex.axis=0.9)

它只是让我在[3]中得到一个空洞的情节。 这里出了什么问题?

[2]是xiRRS.png [3]是xrUzE.png

1 个答案:

答案 0 :(得分:0)

当我评估SleepSeq时,我得到了

SleepSeq 
[1] "2017-02-20 22:00:00 EST" "2017-02-20 23:00:00 EST" "2017-02-21 00:00:00 EST"
[4] "2017-02-21 01:00:00 EST" "2017-02-21 02:00:00 EST" "2017-02-21 03:00:00 EST"
[7] "2017-02-21 04:00:00 EST"

因此,你的情节中的ylim来自&#34; 2017-02-20 22:00:00 EST&#34;到&#34; 2017-02-21 04:00:00 EST&#34;。言语,明天晚上10点到明天凌晨4点。

当我评估progress$Sleep时,我得到了

progress$Sleep
[1] "2017-02-20 01:30:00 EST" "2017-02-20 01:30:00 EST" "2017-02-20 03:00:00 EST"
今天凌晨三次。 progress$Sleep中的最晚时间是您最近绘制时间的19小时 - 因此您的点数不在图表中。

修复

解决这个问题的一种方法是,如果你在午夜后上床睡觉,请加一天。

Midnight   = as.POSIXct("00:00", format="%H:%M")
LateNights = which((progress$Sleep - Midnight) < 12)
OneDay     = 24*60*60
progress$Sleep[LateNights] = progress$Sleep[LateNights] + OneDay

现在只需运行原始代码。

plot(Sleep~Date, data=progress, xlim=c(DateSeq[1], DateSeq[length(DateSeq)]),   
ylim=c(SleepSeq[1], SleepSeq[length(SleepSeq)]), xlab="Date", xaxt='n', type="l",
 ylab="Bedtime", main="Time I went to sleep over time")
axis.Date(1, at=DateSeq, format="%d/%m", las=2, cex.axis=0.9)

Bedtime

相关问题