【问题标题】:Messed up panels after plot.zoo (multiple) and par(new=T)plot.zoo (multiple) 和 par(new=T) 之后的面板搞砸了
【发布时间】:2019-03-07 13:57:03
【问题描述】:

我用 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')

【问题讨论】:

    标签: r zoo par


    【解决方案1】:

    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()
    }
    

    【讨论】:

    • 非常感谢您提供此解决方案!独立于 plot.zoo,不应该 par(new = T) 重置所有内容(这样就没有关于面板/屏幕的信息)?
    • 它不受支持,因此如果您尝试使用它会发生什么未定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2012-12-12
    • 2013-07-15
    • 1970-01-01
    • 2017-10-03
    相关资源
    最近更新 更多