如何更改 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 轴

Kendo UI-如何更改条形图中 X 轴的颜色

如何使用R中的绘图功能更改散点图中x轴和y轴标签的字体大小和颜色?

服务图中的代理数量在服务块队列中的等待时间?任意逻辑

在 Matlab 图中更改字体大小

更改 sns 散点图中的图例