1

在为时间序列绘制轴时,我们通常会创建刻度线并单独添加轴。由于我必须绘制许多时间序列,我尝试编写以下函数:

简单的绘图命令

 set.seed(1)

 x <- as.ts(rnorm(1:150))

 plot <- plot(x, xaxt = "n", yaxt = "n")

将此答案中的一组命令转换为函数

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) 必须绘制轴,但它没有,也没有错误。即使单独键入命令也不会绘制轴。

有什么解决办法吗?

4

1 回答 1

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)它应该可以工作。

于 2013-06-17T21:56:17.607 回答