2012-01-26 5 views
5

Esiste una soluzione alternativa per impostare il colore quando si utilizza plot.xts?Impostare il colore in plot.xts

This bug (ancora presente in 0.8.2) rende impossibile. So che potrei usare plot.zoo ma mi stavo chiedendo se ci fosse una soluzione più pulita dal momento che il bug non sembra sarà risolto in tempi brevi :)

risposta

5

Ecco una versione con patch. Ho dovuto esportare is.OHLC da xts per farlo funzionare. Spero che non ci siano effetti collaterali. Ho aggiunto un argomento e lo ho passato a plot in modo esplicito.

plot.xts2 <- function (x, y = NULL, type = "l", auto.grid = TRUE, major.ticks = "auto", 
    minor.ticks = TRUE, major.format = TRUE, bar.col = "grey", 
    candle.col = "white", ann = TRUE, axes = TRUE, col = "black", ...) 
{ 
    series.title <- deparse(substitute(x)) 
    ep <- axTicksByTime(x, major.ticks, format = major.format) 
    otype <- type 
    if (xts:::is.OHLC(x) && type %in% c("candles", "bars")) { 
     x <- x[, xts:::has.OHLC(x, TRUE)] 
     xycoords <- list(x = .index(x), y = seq(min(x), max(x), 
       length.out = NROW(x))) 
     type <- "n" 
    } 
    else { 
     if (NCOL(x) > 1) 
      warning("only the univariate series will be plotted") 
     if (is.null(y)) 
      xycoords <- xy.coords(.index(x), x[, 1]) 
    } 
    plot(xycoords$x, xycoords$y, type = type, axes = FALSE, ann = FALSE, 
     col = col, ...) 
    if (auto.grid) { 
     abline(v = xycoords$x[ep], col = "grey", lty = 4) 
     grid(NA, NULL) 
    } 
    if (xts:::is.OHLC(x) && otype == "candles") 
     plot.ohlc.candles(x, bar.col = bar.col, candle.col = candle.col, 
      ...) 
    dots <- list(...) 
    if (axes) { 
     if (minor.ticks) 
      axis(1, at = xycoords$x, labels = FALSE, col = "#BBBBBB", 
       ...) 
     axis(1, at = xycoords$x[ep], labels = names(ep), las = 1, 
      lwd = 1, mgp = c(3, 2, 0), ...) 
     axis(2, ...) 
    } 
    box() 
    if (!"main" %in% names(dots)) 
     title(main = series.title) 
    do.call("title", list(...)) 
    assign(".plot.xts", recordPlot(), .GlobalEnv) 
} 

plot.xts2(as.xts(sample_matrix[,1]), col = "blue") 

enter image description here

+0

Spero che questo ha nella prossima release XTS! –

+1

@DrG, un uccellino marrone mi ha detto che l'autore di quella funzione è già stato avvisato del problema. –

0
par(col="blue") 
plot(yourXtsObj) 
box(col="black") 
par(col="black") # reset to default 

Testato con XTS v0.9-7

1
plot(yourobject.xts) 
lines(yourobject.xts, col = 'blue')