【问题标题】:Defining Axis function in R在 R 中定义 Axis 函数
【发布时间】:2013-06-17 20:36:55
【问题描述】:

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

简单的绘图命令

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

有什么解决办法吗?

【问题讨论】:

  • 在您的axis 函数中,尝试将参数at=tt[ix] 更改为at=ix。似乎 R 没有日期形式的 x 轴,而是整数。
  • 谢谢。现在绘制了轴,但提出了另一个问题。如果我们只想要三分之一的刻度线ix &lt;- seq(1, length(tt), 3),那么刻度线和标签的数量不匹配。在这种情况下如何指定刻度线位置?
  • 您是否尝试将行 ix &lt;- seq_along(tt) 更改为 ix &lt;- seq(1, length(tt), 3) 并再次运行您的代码?似乎对我有用。我在tsAxis 函数中有axis(1, at = ix, labels = labs[ix], tcl = -0.7, cex.axis = 0.7, las = 2),这似乎有效。
  • 我试过了,但它给出的错误是 at 和 label 长度不同。它现在可以工作了。
  • 您想发表评论作为答案还是这个问题微不足道并被删除?

标签: r plot


【解决方案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 &lt;- seq_along(tt) 更改为 ix &lt;- seq(1, length(tt), 3) 即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多