绘制时间序列轴时,我们通常会创建刻度线并分别添加轴。 由于我必须绘制许多时间序列,我尝试编写以下函数:
简单的绘图命令
set.seed(1)
x <- as.ts(rnorm(1:150))
plot <- plot(x, xaxt = "n", yaxt = "n")
将一组命令从此answer转换为函数
tt = seq(as.Date("1994-03-01"), by="months", length=150)
tsAxis <- function (tt) {
ix <- seq_along(tt) # number of ticks
fmt <- "%b-%y" # format of time
labs <- format(tt, fmt) # names or labels of dates
axis(1, at = tt[ix], labels = labs[ix],
tcl = -0.7, cex.axis = 0.7, las = 2)
}
然后tsAxis(tt)必须绘制轴但不是,并且也没有错误。 即使单独键入命令也不会绘制轴。
任何解决方案?
答案 0 :(得分:1)
在这种情况下,似乎R表示具有整数的x轴(即,x = 1是第一个事件,x = 2是第二个事件,等等)。如果运行代码,可以看到这个:
set.seed(1)
x <- as.ts(rnorm(1:150))
# Take a look at the x-axis
plot <- plot(x)
我们可以修改您的代码以反映这一点:
tt = seq(as.Date("1994-03-01"), by="months", length=150)
tsAxis <- function (tt) {
ix <- seq_along(tt) # number of ticks
fmt <- "%b-%y" # format of time
labs <- format(tt, fmt) # names or labels of dates
# Change "at=tt[ix]" to "at=ix" here!
axis(1, at = ix, labels = labs[ix],
tcl = -0.7, cex.axis = 0.7, las = 2)
}
或者,如果您想绘制每个第三个刻度标记,只需将ix <- seq_along(tt)
更改为ix <- seq(1, length(tt), 3)
即可。