如果使用 scale_x_datetime,时间序列图会偏移 2 小时 [英] Time series plot gets offset by 2 hours if scale_x_datetime is used

查看:30
本文介绍了如果使用 scale_x_datetime,时间序列图会偏移 2 小时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 ggplot 绘制时间序列,但由于某种原因数据偏移了两个小时.

I'm trying to plot a time series with ggplot but the data gets offset by two hours for some reason.

> 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, 0, 1.47169811320755, 0.30188679245283, 0.132075471698113, 
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, aes(interval, mean))
g + geom_line() +
    scale_x_datetime(date_labels = '%H:%M') # offsets times by -2 hours

我做错了什么?提前致谢.

What am I doing wrong? Thanks in advance.

推荐答案

##Time zone-independent implementation

##Time zone-independent implementation

Eipi10 的 上面的回答是一个很好的解决方法.但是,我想避免将时区设置硬编码到我的程序中,以使其可在任何语言环境中重现.实现方法很简单,去掉tz参数即可:

Eipi10's answer above is a good workaround. However, I wanted to avoid hardcoding a time zone setting into my program in order to make it reproducible in any locale. The way to achieve this is very simple, just leave out the tz parameter:

# Generator function to create 'hh:mm' labels for the x axis
# without explicit 'tz' specification  
date_format <- function(format = "%H:%M") {
    
    function(x) format(x, format)
}

##优势

这种方法的优点是它可以工作,而不管原始变量的时区参数当前语言环境如何.

The advantage of this method is that it works regardless of the time zone parameter of the original variable and the current locale.

例如,如果您的时间值是这样读取的:as.POSIXct(interval, format = '%H:%M', tz = 'Pacific/Honolulu'),图形仍会使用正确的 X 轴标签绘制,即使您在津巴布韦等地也是如此.

For example if your time values were read in with something like this:as.POSIXct(interval, format = '%H:%M', tz = 'Pacific/Honolulu'), the graph will still be plotted with the correct X axis labels, even if you're in, say, Zimbabwe.

这篇关于如果使用 scale_x_datetime,时间序列图会偏移 2 小时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆