如何在R中绘制一年多的日出?

时间:2010-09-22 05:37:06

标签: r

我的日期如下:

"date", "sunrise"
2009-01-01, 05:31
2009-01-02, 05:31
2009-01-03, 05:33
2009-01-05, 05:34
....
2009-12-31, 05:29

我希望将其绘制在R中,其中“date”为x轴,“sunrise”为y轴。

2 个答案:

答案 0 :(得分:5)

您需要更努力地让R绘制合适的图(即获得合适的轴)。假设我有类似于你的数据(为方便起见,这里是一个csv文件:

"date","sunrise"
2009-01-01,05:31
2009-01-02,05:31
2009-01-03,05:33
2009-01-05,05:34
2009-01-06,05:35
2009-01-07,05:36
2009-01-08,05:37
2009-01-09,05:38
2009-01-10,05:39
2009-01-11,05:40
2009-01-12,05:40
2009-01-13,05:41

我们可以适当地读取格式的数据,因此R知道数据的特殊性。 read.csv()调用包含参数colClasses,因此R不会将日期/时间转换为因子。

dat <- read.csv("foo.txt", colClasses = "character")
## Now convert the imported data to appropriate types
dat <- within(dat, {
date <- as.Date(date) ## no need for 'format' argument as data in correct format
sunrise <- as.POSIXct(sunrise, format = "%H:%M")
})
str(dat)

现在出现了一个稍微棘手的一点,因为R会让你的轴出错(或者更好的说它们不是我们想要的),如果你这样做的话

plot(sunrise ~ date, data = dat)
## or
with(dat, plot(date, sunrise))

第一个版本使两个轴都错误,第二个版本可以在日期上正确发送,因此获得x轴正确,但y轴标签不正确。

因此,禁止绘制轴,然后使用axis.FOO FOODatePOSIXct的{​​{1}}函数自行添加它们:

plot(sunrise ~ date, data = dat, axes = FALSE)
with(dat, axis.POSIXct(x = sunrise, side = 2, format = "%H:%M"))
with(dat, axis.Date(x = date, side = 1))
box() ## complete the plot frame

HTH

答案 1 :(得分:1)

我认为您可以使用as.Dateas.POSIXct函数以正确的格式转换这两列(format as.POSIXct参数应设置为{{ 1}})

标准"%H:%M"函数应该能够自行处理时间和日期