2013-10-11 10 views
8

Ho più grafici di serie temporali e ho bisogno di una linea orizzontale in ogni trama ma con valori orizzontali diversi (es. 1a trama: h=50, 2a trama: h=48 .. .).Come aggiungere più linee rette in un plot.zoo multipla

Ho provato abline(h=50... e ottengo la linea orizzontale in ogni trama. Ho provato abline(h=c(50,48... e ottengo linee orizzontali multiluce in ogni trama.

Non riesco a capire come ottenere l'indice plot.zoo per tracciare h=50 nella trama 1, h=48 nella trama 2 e così via.

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) 

risposta

6

Per personalizzare i pannelli singoli in una trama più pannelli non è accuratamente descritto nel testo stesso ?plot.zoo. Nella sezione "Dettagli":
"Nel caso di un pannello personalizzato, lo panel può fare riferimento a parent.frame$panel.number per determinare da quale frame viene chiamato il pannello. Vedere esempi.". E ci sono alcuni esempi. Usandoli come modello, ho scoperto che questo potrebbe essere un modo per chiamare pannelli separati e disegnare uno hline separato in ciascuno.
Aggiornamento . Grazie a @G. Grothendieck per una modifica che ha reso il codice molto più pulito!

# 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) 

enter image description here