如何更改 plot.zoo 图中的(数量)x 轴刻度? (轴()失败)
Posted
技术标签:
【中文标题】如何更改 plot.zoo 图中的(数量)x 轴刻度? (轴()失败)【英文标题】:How to change the (number of) x-axis ticks in a plot.zoo plot? (axis() fails) 【发布时间】:2021-08-21 06:21:30 【问题描述】:以下带有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
如果您需要更多详细信息,请告诉我。
【问题讨论】:
【参考方案1】:这里是基于标准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)
【讨论】:
【参考方案2】:题中的代码有几个问题:
问题中的代码调用 plot.zoo
直接调用 zoo 方法。一般来说,代码应该调用泛型并让它分派方法,而不是直接调用方法。 (必须直接调用该方法的主要情况是泛型出现在当前未加载的不同包中;但是,plot
不是这种情况,因为它是基础 R 的一部分。)
?axTicksByTime
说这个函数是为内部使用而写的
如果您仍然想使用axTicksByTime
,请注意它会将 indexes 返回到时间向量而不是时间本身。这就是为什么当问题使用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)
【讨论】:
以上是关于如何更改 plot.zoo 图中的(数量)x 轴刻度? (轴()失败)的主要内容,如果未能解决你的问题,请参考以下文章
将熊猫 groupby 中的组绘制在一个图中时如何更改 x 轴