r语言 - 在plot.zoo(多个)和par(new=T)之后搞砸了面板



我用plot.zoo创建了一个六格图。 并使用 par(new = T( 清除了我的图形设置。我预计接下来的六格图将"在"另一个图的"之上"。然而,第一个面板丢失了(仍然在旧图上(,只有 2-6 个出现(但在错误的位置(。 除了 par(new = T( 之外,我还需要重置什么?

> require(PerformanceAnalytics) 
> data('managers') 
> managers <- managers[,c('HAM1','HAM3','HAM4','SP500 TR','US 10Y TR','US 3m TR')]
> plot.zoo(managers) 
> par(new = T) 
> plot.zoo(managers*1.1, col='red')
plot.zoo

不支持在多面板图上这样做。 通常,它希望您在一次调用中完成所有操作,可能通过指定panel=函数。

这里有两种方法。 请注意,在第一种方法中回收screens

library(PerformanceAnalytics)
library(zoo)
data("managers")   
cn <- c('HAM1','HAM3','HAM4','SP500 TR','US 10Y TR','US 3m TR')
managers_z <- as.zoo(managers)
# 1. without a panel function
plot(cbind(managers_z[, cn], 1.1*managers_z[, cn]), screens = seq_along(cn),
col = rep(c("black", "red"), each = length(cn)))
# 2. with a panel function
pnl <- function(x, y, ...) {
lines(y ~ x, ...)
dots <- list(...)
dots$col <- "red"
do.call(lines, c(1.1 * y ~ x, dots))
}
plot(managers_z[, cn], panel = pnl)

另请注意,如果您想分多次完成,您可以使用如下xyplot.zoo来完成:

library(lattice)
xyplot(managers_z[, cn])
for(i in seq_along(cn)) {
trellis.focus("panel", 1, i)
panel.lines(1.1 * managers_z[, cn[i]], col = "red")
trellis.unfocus()
}

最新更新