[英]How to change the (number of) x-axis ticks in a plot.zoo plot? (axis() fails)
以下時間序列 plot 和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 方法。 一般來說,代碼應該調用泛型並讓它分派方法,而不是直接調用方法。 (必須直接調用該方法的主要情況是泛型出現在當前未加載的不同 package 中;但是, plot
不是這種情況,因為它是基礎 ZE1E1D3D40573127E9DAF1283 的一部分。)
?axTicksByTime
說這個 function 是為內部使用而編寫的
如果您仍然想使用axTicksByTime
,請注意它將索引返回到時間向量而不是時間本身。 這就是為什么當問題使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.