如何在多个plot.zoo中添加多条直线

dan*_*ele 8 plot r zoo

我有多个时间序列数据图,我需要在每个图中有一条水平线,但是水平值不同(例如h=50,第一个图:第二个图:h=48......).

我试过abline(h=50...,我在每个情节中得到水平线.我试过abline(h=c(50,48...,每个情节都会得到多条水平线.

我无法弄清楚如何获得plot.zoo索引以便h=50在第一个图中绘制,h=48在第二个图中等等.

library(xts)
data(sample_matrix)
x <- as.xts(sample_matrix)

# plot with single line
my.panel <- function(x, ...) {
    lines(x, ...)
    abline(h=50, col = "red", lty="solid", lwd=1.5 )
}
plot.zoo(x, main="title",
plot.type="multiple", type="o", lwd=1.5, col="blue",
panel=my.panel)


# plot multiple lines in all plots
my.panel <- function(x, ...) {
    lines(x, ...)
    abline(h=c(50,50,48,50), col = "red", lty="solid", lwd=1.5 )}

plot.zoo(x, main="title",
plot.type="multiple", type="o", lwd=1.5, col="blue",
panel=my.panel)
Run Code Online (Sandbox Code Playgroud)

Hen*_*rik 6

在实际?plot.zoo文本中没有详细描述在多面板图中自定义单个面板.在"详细信息"部分中,您会发现:
"在自定义面板的情况下,panel可以引用parent.frame$panel.number以确定调用面板的帧.请参阅示例.".还有很多例子.使用它们作为模板,我发现这可以是一种调用单独面板的方法,并hline在每个面板中单独绘制.
更新.感谢@G.Grothendieck进行编辑,使代码清晰!

# create values for hline, one for each panel
hlines <- c(50, 50, 48, 50)

# panel function that loops over panels
my.panel <- function(x, ...) {
  lines(x, ...)
  panel.number <- parent.frame()$panel.number
  abline(h = hlines[panel.number], col = "red", lty = "solid", lwd = 1.5)
}

plot.zoo(x, main = "title", type = "o", lwd = 1.5, col = "blue", panel = my.panel)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述