问题: 我正在尝试使用ggplot绘制时间序列,但由于某种原因,数据会偏移两个小时. 数据: > test <- structure(list(interval = structure(
... . . 问题:
我正在尝试使用ggplot绘制时间序列,但由于某种原因,数据会偏移两个小时.
数据:
> test <- structure(list(interval = structure(c(1465423500,1465423800,1465424100,1465424400,1465424700,1465425000,1465425300,1465425600,1465425900,1465426200,1465426500,1465426800,1465427100),class = c("POSIXct","POSIXt"),tzone = ""),mean = c(0.339622641509434,0.132075471698113,0.150943396226415,0.0754716981132075,2.09433962264151,0.528301886792453,0.867924528301887,1.47169811320755,0.30188679245283,0.320754716981132,0.679245283018868)),.Names = c("interval","mean"),class = c("tbl_df","data.frame"),row.names = c(NA,-13L))> test Source: local data frame [13 x 2] interval mean (time) (dbl) 1 2016-06-09 00:05:00 0.3396226 # First value: 5 minutes past midnight 2 2016-06-09 00:10:00 0.1320755 3 2016-06-09 00:15:00 0.1509434 4 2016-06-09 00:20:00 0.0754717 5 2016-06-09 00:25:00 2.0943396 6 2016-06-09 00:30:00 0.5283019 7 2016-06-09 00:35:00 0.8679245 8 2016-06-09 00:40:00 0.0000000 9 2016-06-09 00:45:00 1.4716981 10 2016-06-09 00:50:00 0.3018868 11 2016-06-09 00:55:00 0.1320755 12 2016-06-09 01:00:00 0.3207547 13 2016-06-09 01:05:00 0.6792453
例
这很好用:
g <- ggplot(interval.steps,aes(interval,mean))g + geom_line()
但这不是:
g <- ggplot(interval.steps,mean))g + geom_line() + scale_x_datetime(date_labels = '%H:%M') # offsets times by -2 hours
题
我究竟做错了什么?提前致谢.
.解决方法
. 看起来scale_x_datetime正在将时区的时区从本地时区更改为UTC.以下功能可以解决问题.
# Source: https://stackoverflow.com/a/11002253/496488# Put in your local timezone. I've inserted mine just for illustration.date_format_tz <- function(format = "%H:%M",tz = "America/Los_Angeles") { function(x) format(x,format,tz=tz)}g <- ggplot(interval.steps,mean))g + geom_line() + scale_x_datetime(labels = date_format_tz()). . .. ...