在R中定义轴功能

时间:2013-06-17 20:36:55

标签: r plot

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

简单的绘图命令

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

任何解决方案?

1 个答案:

答案 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)即可。