R 绘图日值的正确格式

R 绘图日值的正确格式,r,R,我想从预测过程中绘制x轴上的天数图。我用这里的指南做了一个例子: 链接中的示例: Lines <- "Date Used 2011-11-1/00:00:00 587 2011-11-2/01:00:00 578 2011-11-3/02:00:00 600 2011-11-4/03:00:00 599 2011-11-5/04:00:00 678 2011-11-6/05:00:00 555 2011-11-7/06:00:00

我想从预测过程中绘制x轴上的天数图。我用这里的指南做了一个例子:

链接中的示例:

 Lines <- "Date        Used
 2011-11-1/00:00:00   587
 2011-11-2/01:00:00   578
 2011-11-3/02:00:00   600
 2011-11-4/03:00:00   599
 2011-11-5/04:00:00   678
 2011-11-6/05:00:00   555
 2011-11-7/06:00:00   650"

 dm <- read.table(text = Lines, header = TRUE)
 x = dm
require(lubridate)
library(forecast)
 y = ts(x$Used, start=c(2011, yday("2011-11-01")), frequency=365)
 fcast = forecast(ets(y), 10)
 plot(fcast, xaxt="n")
  a3 = strptime(x$Date, "%Y-%m-%d/%H:%M:%S")
 axis(1, at = decimal_date(a3), labels = format(a3, "%Y-%b-%d %H:%M:%S"), cex.axis=0.3, las=2)
我将数据保存到csv文件中,如上所述:

 df = read.csv(filepath, header=TRUE, sep=",")

 require(lubridate)
 library(forecast)
 y = ts(df$price)
 fcast = forecast(ets(y), 10)

 plot(fcast, xaxt="n")
 a3 = strptime(df$day, "%Y-%m-%d %H:%M:%S")
 axis(1, at = decimal_date(a3), labels = format(a3, "%Y-%b-%d %H:%M:%S"), cex.axis=0.6, las=2)
在x轴的第二个片段中,天没有出现。怎么了


提前感谢您。

在您的第一个片段中,请注意这一行:

y = ts(x$Used, start=c(2011, yday("2011-11-01")), frequency=365)
将创建一个带有实际观测日期的时间序列。这些日期的十进制表示形式存储在
y
中,用于绘制时间序列,当您稍后绘制轴并传入
Decimal\u date(a3)
时,情况匹配

unclass(y)
# [1] 587 578 600 599 678 555 650
# attr(,"tsp")
# [1] 2011.833 2011.849  365.000
decimal_date(a3)
# [1] 2011.833 2011.836 2011.838 2011.841 2011.844 2011.847 2011.850
看看这些数字有多相似

但您的第二段代码中没有包含这些日期:

y = ts(df$price)
因此,观测值仅绘制在1、2、3、4、5和6处。但您再次传入
十进制日期(a3)
——远离屏幕的值

unclass(y)
# [1] 12 14 15 14 13 16
# attr(,"tsp")
# [1] 1 6 1
decimal_date(a3)
# [1] 2010.115 2010.115 2010.115 2010.115 2010.116 2010.116
但请注意另一点:这些
decimal\u date
值中的许多值是相同的。这是因为您在第二个片段中的观察结果的差异是几个小时,而不是几天。这不是您想要的功能

一种解决方法是在创建轴时仅使用1-6编号:

axis(1, at = seq_along(a3), labels = format(a3, "%Y-%b-%d %H:%M:%S"), cex.axis=0.6, las=2)
另一种方法是在创建时间序列和绘制标签时将日期转换为秒:

df$day <- as.POSIXlt(df$day)

y = zoo(df$price, df$day)

axis(1, at = as.numeric(df$day), labels = format(a3, "%Y-%b-%d %H:%M:%S"), cex.axis=0.6, las=2)
df$day
df$day <- as.POSIXlt(df$day)

y = zoo(df$price, df$day)

axis(1, at = as.numeric(df$day), labels = format(a3, "%Y-%b-%d %H:%M:%S"), cex.axis=0.6, las=2)