时间序列图:在R中更改x轴格式

时间:2018-04-05 19:04:35

标签: r plot time-series

我正在尝试将ts图上的x轴标签从默认值(例如year.samplenumber)更改为实际日期。我已经在其他线程中搜索了,但我找到的解决方案并不适合我。

mm17

   date fullband band1 
1 2015/1/14 109.0873 107.0733     
2 2015/1/15 110.1434 109.1999     
3 2015/1/16 109.8811 108.6232     
4 2015/1/17 110.4814 109.8164     
5 2015/1/18 110.1513 109.2764     
6 2015/1/19 110.3266 109.5860     

mm17.ts<-ts(mm17.perday[,2], frequency=365, start=c(2015, 14))

cols<-c("red", "green", "orange", "purble", "blue")
dates<-as.Date(mm17[,1])

ts.plot(mm17.ts, col=cols[1], xaxt="n")
axis(1, dates, format(dates, "%m %d"), cex.axis = .7)

TS Plot

正如您所见,轴命令由于某种原因不起作用。

2 个答案:

答案 0 :(得分:1)

这里发生的是由ts.plotdates向量绘制的日期的基础数值之间的不匹配。 ts.plot输出中的x轴日期字面上的大小为2015.1,2015.2等。但是,dates向量中日期的基础数值是1970年1月1日以来的天数。到给定日期(R中的日期实际上是附加了Date类的数值)。例如:

dates
[1] "2015-01-14" "2015-01-15" "2015-01-16" "2015-01-17" "2015-01-18" "2015-01-19"
as.numeric(dates)
[1] 16449 16450 16451 16452 16453 16454
x=16449
class(x)="Date"
x
[1] "2015-01-14"

您还可以使用以下代码查看此内容。我们扩展x轴范围以包括上面列出的数值。请注意,您可以在16,449的右侧看到一个日期标签,而数据值则绘制在2015年的左侧附近:

ts.plot(mm17.ts, col=cols[1], xlim=c(0, 16455))
axis(1, dates, format(dates, "%m %d"), cex.axis = .8, col.axis="red")
axis(1, 2015, 2015, cex.axis = .8, col.axis="red")

enter image description here

因此,让我们更改at函数中的axis参数,以便我们将日期标签放在正确的位置。我们将使用lubridate包中的一些函数来帮助解决这个问题。另请注意,要删除默认的x轴标签,ts.plot要求使用xaxt参数将gpars(和其他图形参数)作为列表传递(请参阅{{1帮助更多关于此):

ts.plot

enter image description here

答案 1 :(得分:1)

一般来说,ts类不适合日常数据。它更适合月度,季度和年度数据。

对于每日数据,将其转换为动物园和情节会更容易:

library(zoo)
z <- read.zoo(mm17, format = "%Y/%m/%d")
plot(z$fullband, col = "red")

screenshot

注意

我们假设mm17如下所示。

Lines <- "   date fullband band1 
1 2015/1/14 109.0873 107.0733     
2 2015/1/15 110.1434 109.1999     
3 2015/1/16 109.8811 108.6232     
4 2015/1/17 110.4814 109.8164     
5 2015/1/18 110.1513 109.2764     
6 2015/1/19 110.3266 109.5860"
mm17 <- read.table(text = Lines)