如何更改 plot.zoo 图中的(数量)x 轴刻度? (轴()失败)

How to change the (number of) x-axis ticks in a plot.zoo plot? (axis() fails)

以下带有 plot.zoo() 的时间序列图显示了奇怪数量的(只有一个)x 轴刻度。如何说服 plot.zoo() 显示更多 x 轴刻度?

## Create a dummy time series
library(xts)
start <- as.Date("2020-04-01")
end <- as.Date("2021-06-02")
dat <- seq(start, end, length.out = 226)
set.seed(271)
ts <- xts((1:226) + rnorm(226, sd = 1/3), order.by = dat)
plot.zoo(ts) # => only one x-axis tick displayed

我尝试了通常的方法来改变 x 轴,但由于某些原因 (?) axis() 在这里没有得到尊重:

## Trial
plot.zoo(ts, xaxt = "n")
ticks <- axTicksByTime(index(ts))
labels <- names(ticks)
axis(1, at = ticks, labels = labels) # => no x-axis ticks displayed

如果您需要更多详细信息,请告诉我。

这里是一个基于标准的版本plot():

plot(as.numeric(ts), type = "l", xaxt = "n")
ticks <- axTicksByTime(index(ts), format.labels = "%Y-%m-%d")
labels <- names(ticks)
axis(1, at = ticks, labels = labels)

还有更好一点的:

plot(as.numeric(ts), type = "l", xaxt = "n", xlab = "", ylab = "ts")
ticks <- axTicksByTime(index(ts), format.labels = "%Y-%m")
labels <- names(ticks)
axis(1, at = ticks, labels = labels, las = 2)

题中代码有几个问题:

  • 问题中的代码调用了plot.zoo,这是直接调用zoo方法。一般来说,代码应该调用泛型并让它分派方法而不是直接调用方法。 (必须直接调用该方法的主要情况是泛型出现在当前未加载的不同包中;但是,plot 不是这种情况,因为它是基础 R 的一部分。)

  • ?axTicksByTime 表示此函数是为内部使用而编写的

  • 如果你想使用axTicksByTime,那么请注意它returns 索引到时间向量而不是时间本身.这就是为什么当问题使用 axis 命令时没有出现的原因。

如果你无论如何都想使用axTicksByTime并与plot的zoo方法一起使用,那么它会像这样完成。

plot(as.zoo(ts), xaxt = "n")
ticks <- axTicksByTime(ts, format = "%Y %m")
labels <- names(ticks)
axis(1, at = time(ts)[ticks], labels = labels)