在x轴和y轴上创建时间图(在R中)

时间:2017-11-08 16:27:33

标签: r datetime plot strptime as.date

有两个时间点(两次测量),我想在x轴上第一次绘制,在y轴上绘制第二次作为点,因此我可以轻松地检查45°以上的数据点 - 第二次测量在第一次之后的线(大多数情况下都是如此,但并非所有情况都是如此),并评估从第一次开始经过的时间。

因此,我有两列日期,我可以将它们转换为datedate-time个对象。我现在无法简化,哪种格式可以更容易实现情节。

D = data.frame(time1 = c("2007-06-22","2007-05-22","2007-05-23"), time2 = c("2007-06-22","2007-05-24","2007-06-05"))
D$time1 <- strptime(D$time1, format = "%Y-%m-%d")
D$time2 <- strptime(D$time2, format = "%Y-%m-%d")
class(D$time1)
D$time1 <- as.Date(D$time1, format = "%Y-%m-%d")
class(D$time1)

我需要一些简单的事情:

plot(D$time1, D$time2)

但我还需要一个可修改的版本,它不会绘制日期,但允许休息(周,月,年),比如月。

enter image description here

非常感谢你的想法。

解决方案:两个版本原则上都有效。我选择了ggplot,因为标签上的一个更灵活。我提前进行了数据清理,因此在对缺失数据进行子集化后,我使用了:

library( ggplot2 )
ggplot( mydata, aes(x=t0, y=t1) ) + geom_point() +
  scale_x_date(date_labels = "%b %y", date_breaks = "3 month") +
  scale_y_date(date_labels = "%b %y", date_breaks = "3 month") 
对我2年的数据来说,3个月是一个很好的休息时间。这是我的解决方案:

enter image description here

2 个答案:

答案 0 :(得分:1)

你可以这样做:

dates_axis <- as.Date(strptime(c("2007-01-01","2007-12-01"), format = "%Y-%m-%d"))
dates_axis <- seq.Date(dates_axis[1],dates_axis[2],"month")

oldpar <- par()
par(mar = c(6,6,1,1))
plot(dates_axis,dates_axis,
    xaxt = "n",
    yaxt = "n",
    bty = "n",
    type = "n",
    xlab = "",
    ylab = "")
axis(1, at = dates_axis, labels = months(dates_axis), las = 2)
axis(2, at = dates_axis, labels = months(dates_axis), las = 1)
points(D$time1, D$time2, pch = 20)
abline(a = 0, b = 1)
par(oldpar)

enter image description here

答案 1 :(得分:1)

ggplot了解时间/日期数据。正如您在问题中所做的那样使用Date类:

D <- data.frame( time1 = as.Date(c("2007-06-22","2007-05-22","2007-05-23")),
                time2 = as.Date(c("2007-06-22","2007-05-24","2007-06-05")) )

现在,您可以使用ggplotscale_x_date将其传递给scale_y_date,以便灵活地指定广告/标签/等。

library( ggplot2 )
ggplot( D, aes(x=time1, y=time2) ) + geom_point() +
    scale_x_date( date_labels = "%b %d", date_breaks = "1 week") +
    scale_y_date( date_labels = "%b %d", date_breaks = "1 day" )

有关详细信息,请参阅?scale_x_date

enter image description here