我最近开始使用ggplot,我对在x轴上绘制日期时间感到困惑。
有问题的最小例子是:
df = data.frame(DateTime=c("2011-03-29 22:44:01", "2011-03-30 00:08:36", "2011-04-07 08:49:50"), response=c(1,2,3))
df$DateTime = as.POSIXct(df$DateTime, format="%Y-%m-%d %H:%M:%S")
这给出了错误:
> qplot(DateTime, response, data=df)
Error in seq.int(r1$year, to$year, by) : 'from' must be finite
但这很好用:
> qplot(DateTime, response, data=df[1:2,])
为什么我的第一张情节失败?
正如请求的sessionInfo()显示:
sessionInfo()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 >LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] grid grDevices datasets splines graphics stats tcltk utils methods base
other attached packages:
[1] car_2.0-9 nnet_7.3-1 MASS_7.3-11 RColorBrewer_1.0-2 doBy_4.3.0 ggplot2_0.8.9 proto_0.3-9.1 reshape_0.8.4
[9] plyr_1.4.1 svSocket_0.9-51 TinnR_1.0.3 R2HTML_2.2 >Hmisc_3.8-3 survival_2.36-5
loaded via a namespace (and not attached):
[1] cluster_1.13.3 digest_0.4.2 lattice_0.19-17 Matrix_0.999375-46 >svMisc_0.9-61 tools_2.12.2
和traceback()输出:
traceback() 20: seq.POSIXt(floor_time(range[1], time), ceiling_time(range[2], time), by = time) 19: fullseq_time(d, .$break_points()[2]) 18: get(x, envir = this, inherits = inh)(this, ...) 17: scales$x$output_breaks() 16: inherits(x, "factor") 15: is.factor(x) 14: rescale(data, 0:1, range, clip = clip) 13: get(x, envir = this, inherits = inh)(this, ...) 12: .$rescale_var(scales$x$output_breaks(), x.range, TRUE) 11: get(x, envir = this, inherits = inh)(this, ...) 10: coord$compute_ranges(scales) 9: FUN(1L[[1L]], ...) 8: lapply(seq_along(data), function(i) { layer ), scales = , mapping = list(x = DateTime, y = response), options = list(labels = list(x = "DateTime", y = "response")), coordinates = , facet = , plot_env = )) 1: print(list(data = list(DateTime = c(1301431441, 1301436516, 1302158990 ), response = c(1, 2, 3)), layers = list(), scales = , mapping = list(x = DateTime, y = response), options = list( labels = list(x = "DateTime", y = "response")), coordinates = , facet = , plot_env = ))
答案 0 :(得分:1)
我遇到了同样的问题。 Windows XP / US English / R 2.13.0
我最多可以绘制476条记录,但如果我有477或更多,则会弹出错误。
这有效:
data=subset(Pressures,DaysAgo<7)[1:476,])
这不是:
data=subset(Pressures,DaysAgo<7)[1:477,])
我不确定是否是导致问题的记录数量或第477条记录的性质。
无论如何,解决方法似乎是指定主要和次要网格间隔,即
p <- p+scale_x_datetime(major="1 day",minor="6 hours")
其中p是你的情节。
答案 1 :(得分:0)
我的研究中最近的数据也遇到了同样的问题。
事实上,将df[3,1]
更改为2011-04-30 08:49:50
(4月30日)会让它再次发挥作用。此外,plot()
对此没有任何问题。
因此ggplot2中似乎存在关于日期时间转换的一些错误。
编辑:我在我的Mac上重新测试了这个并没有问题,所以只在Windows上。下一步可能是检查这实际上是否是区域设置问题。
答案 2 :(得分:0)
我也有这个问题,但对我来说,它已经解决,因为我已经更新到R 2.13.1。 OP,您能检查并确认吗?
R version 2.13.1 (2011-07-08)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] C
attached base packages:
[1] grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] lubridate_0.2.5 ggplot2_0.8.9 proto_0.3-9.2 reshape_0.8.4 reshape2_1.1 xtable_1.5-6 plyr_1.5.2
[8] zoo_1.6-5
loaded via a namespace (and not attached):
[1] digest_0.5.0 lattice_0.19-30 stringr_0.5 tools_2.13.1