我正在尝试将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)
正如您所见,轴命令由于某种原因不起作用。
答案 0 :(得分:1)
这里发生的是由ts.plot
和dates
向量绘制的日期的基础数值之间的不匹配。 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")
因此,让我们更改at
函数中的axis
参数,以便我们将日期标签放在正确的位置。我们将使用lubridate
包中的一些函数来帮助解决这个问题。另请注意,要删除默认的x轴标签,ts.plot
要求使用xaxt
参数将gpars
(和其他图形参数)作为列表传递(请参阅{{1帮助更多关于此):
ts.plot
答案 1 :(得分:1)
一般来说,ts类不适合日常数据。它更适合月度,季度和年度数据。
对于每日数据,将其转换为动物园和情节会更容易:
library(zoo)
z <- read.zoo(mm17, format = "%Y/%m/%d")
plot(z$fullband, col = "red")
我们假设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)