我正在使用facet_grid绘制我的时间序列数据。数据是
> dput(mel.ob)
structure(list(timestamp = structure(c(1438450200, 1438536600,
1438623000, 1438709400, 1438795800, 1438882200, 1438968600, 1439055000,
1439141400, 1439227800, 1439314200, 1439400600, 1439487000, 1439573400,
1439659800, 1439746200, 1439832600, 1439919000, 1440005400, 1440091800,
1440178200, 1440264600, 1440351000, 1440437400, 1440523800, 1440610200,
1440696600, 1440783000, 1440869400, 1440955800, 1438450200, 1438536600,
1438623000, 1438709400, 1438795800, 1438882200, 1438968600, 1439055000,
1439141400, 1439227800, 1439314200, 1439400600, 1439487000, 1439573400,
1439659800, 1439746200, 1439832600, 1439919000, 1440005400, 1440091800,
1440178200, 1440264600, 1440351000, 1440437400, 1440523800, 1440610200,
1440696600, 1440783000, 1440869400, 1440955800, 1438450200, 1438536600,
1438623000, 1438709400, 1438795800, 1438882200, 1438968600, 1439055000,
1439141400, 1439227800, 1439314200, 1439400600, 1439487000, 1439573400,
1439659800, 1439746200, 1439832600, 1439919000, 1440005400, 1440091800,
1440178200, 1440264600, 1440351000, 1440437400, 1440523800, 1440610200,
1440696600, 1440783000, 1440869400, 1440955800), tzone = "Asia/Kolkata", tclass = c("POSIXct",
"POSIXt"), class = c("POSIXct", "POSIXt")), variable = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("power", "hpanom",
"lofanom"), class = "factor"), value = c(172.016104060554, 176.777480085691,
184.018404140075, 175.561151940955, 182.52419107159, 175.216664665937,
183.751597162088, 198.844153259955, 199.803173963254, 237.508030500042,
285.079349749013, 188.377162014776, 452.238984323895, 304.084650686052,
304.976941431231, 168.37194477982, 221.142072661718, 285.339264474312,
243.126828978721, 526.165040140682, 583.26909929249, 549.145660841621,
195.02748863608, 200.088289825199, 249.279407493724, 410.968041439378,
368.949028046264, 361.528117646774, 394.092273548577, 439.027137154341,
0.190453461153838, 0.738170304350057, 0.359277651161948, 0.383363598976019,
0.357189854750563, 0.357189854750563, 0, 0.464407941461156, 0.842226206120729,
0.928056670115148, 0.939184368487052, 0.174074829364281, 0.999333003990622,
0.97052094947291, 0.957985395010343, 0.620128340774666, 0.971218262867733,
0.918581736843709, 0.898790693128374, 0.992626480647862, 0.996099376857962,
0.995219939905799, 0.864283999224187, 0.903098686478643, 0.929581519648184,
0.98981186152571, 0.986686711459769, 0.989957071504958, 0.984688509451126,
0.986320878558335, 0.02, 0.1, 0.03, 0.02, 0.07, 0.02, 0, 0.04,
0.05, 0.45, 0.11, 0.01, 1, 0.1, 0.13, 0.03, 0.72, 0.13, 0.59,
0.54, 0.72, 0.52, 0.08, 0.07, 0.14, 0.2, 0.15, 0.15, 0.17, 0.18
)), row.names = c(NA, -90L), .Names = c("timestamp", "variable",
"value"), class = "data.frame")
我正在使用以下代码进行绘图
f <- ggplot(data=mel.ob,aes(x=timestamp,y=value,ymin=0,ymax=value))+facet_grid(variable~., scales = "free_y")+
theme(axis.title.x=element_blank(),axis.title.y=element_blank())
f1 <- f + geom_linerange(subset=.(variable=="hpanom")) # require(plyr) for dot function
f2 <- f1 + geom_linerange(subset=.(variable=="lofanom"))
f3 <- f2 + geom_line(subset=.(variable=="power"))
f3
所以问题是我的数据集包含8月1日至8月30日的数据,但该图显示了8月2日至8月31日的数据。为什么以及如何将我的数据集移动一天?我在哪里做错了?
答案 0 :(得分:4)
情节实际上并没有改变您的日期。您的日期是POSIXct格式,包括小时,分钟和秒。 ggplot2
将每个点放在每个日期的确切时/分/秒。你所有的时间都是23个小时。因此,看起来像8月3日那样的线路实际上是8月2日的第23个小时。同样,最左边的一行是在8月1日的第23个小时。
如果展开图形的水平范围并仔细观察,您会看到主要网格线上的垂直线每条都略微(即1小时)移动到主要网格线的左侧,每天午夜。
您可以在代码中使用as.Date(timestamp)
按天绘制点数(不考虑小时数)。另一种选择是保持日期/时间格式,但将主要网格线准确放置在您想要的位置。例如,以下是从8月1日23:00开始每周放置网格线的方法,但是将标签设置为没有时间的日期:
f3 + scale_x_datetime(breaks=seq(min(mel.ob$timestamp), max(mel.ob$timestamp),
by="1 week"),
labels=as.Date(seq(min(mel.ob$timestamp), max(mel.ob$timestamp),
by="1 week")))
作为附加说明,R中的日期/时间格式实际上只是添加了日期/时间类的数字变量。类POSIXct
是自1970年1月1日00:00:00(在UTC时区)以来的秒数,而类Date
是自1970年1月1日以来的天数。 ggplot
正在绘制这些数值,但使用适合相应日期类的中断和标签。您可以通过执行as.numeric(mel.ob$timestamp)
和as.numeric(as.Date(mel.ob$timestamp))
来查看基础数值。