How to set candlestick width in candlestick chart using plot.xts?

I have simple OHLC and XTS data

SF <- structure(c(1.064, 1.07, 1.071, 1.08, 1.08, 1.076, 1.078, 1.08, 1.08, 1.082, 1.081, 1.082, 1.074, 1.07, 1.073, 1.075, 1.081, 1.084, 1.092, 1.091, 1.097, 1.095, 1.099, 1.094, 1.096, 1.097, 1.096, 1.096, 1.097, 1.091, 1.078, 1.083, 1.088, 1.084, 1.081, 1.095, 1.096, 1.085, 1.074, 1.075, 1.073, 1.07, 1.068, 1.072, 1.084, 1.08, 1.081, 1.077, 1.081, 1.083, 1.084, 1.083, 1.082, 1.082, 1.075, 1.074, 1.075, 1.092, 1.086, 1.092, 1.093, 1.098, 1.102, 1.103, 1.099, 1.098, 1.1, 1.101, 1.098, 1.098, 1.1, 1.092, 1.084, 1.087, 1.088, 1.084, 1.096, 1.099, 1.097, 1.086, 1.078, 1.076, 1.076, 1.073, 1.064, 1.069, 1.071, 1.077, 1.075, 1.074, 1.078, 1.078, 1.08, 1.079, 1.078, 1.073, 1.068, 1.07, 1.069, 1.074, 1.08, 1.083, 1.089, 1.09, 1.096, 1.094, 1.092, 1.092, 1.094, 1.094, 1.09, 1.092, 1.088, 1.08, 1.076, 1.078, 1.081, 1.079, 1.08, 1.09, 1.084, 1.072, 1.073, 1.069, 1.066, 1.07, 1.067, 1.072, 1.08, 1.079, 1.076, 1.077, 1.08, 1.08, 1.082, 1.081, 1.081, 1.074, 1.072, 1.073, 1.074, 1.081, 1.084, 1.091, 1.092, 1.097, 1.097, 1.099, 1.095, 1.095, 1.097, 1.097, 1.096, 1.094, 1.091, 1.08, 1.083, 1.086, 1.083, 1.082, 1.095, 1.096, 1.086, 1.074, 1.075, 1.073, 1.071, 1.072), .Dim = c(42L, 4L), .Dimnames = list( NULL, c("Open", "High", "Low", "Close")), index = structure(c(1353427200, 1353513600, 1353600000, 1353859200, 1353945600, 1354032000, 1354118400, 1354204800, 1354464000, 1354550400, 1354636800, 1354723200, 1354809600, 1355068800, 1355155200, 1355241600, 1355328000, 1355414400, 1355673600, 1355760000, 1355846400, 1355932800, 1356019200, 1356278400, 1356451200, 1356537600, 1356624000, 1356883200, 1357056000, 1357142400, 1357228800, 1357488000, 1357574400, 1357660800, 1357747200, 1357833600, 1358092800, 1358179200, 1358265600, 1358352000, 1358438400, 1358697600), tzone = "", tclass = c("POSIXct", "POSIXt")), .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "", class = c("xts", "zoo")) plot.xts(SF, type='candles') 

Candles come out very thin. How to make them wider?

Studying the source code of plot.xts, I see that the internal function xts plot.ohlc.candles is called to output OHLC data in the form of candles to which ... is passed. N

 plot.ohlc.candles(x, bar.col = bar.col, candle.col = candle.col, ...) 

However, if I try to set the argument width = 0.5 in my call to the plot.xts function, I get warnings that the width is not a graphical parameter

 Warning messages: 1: In plot.window(...) : "width" is not a graphical parameter 2: In plot.xy(xy, type, ...) : "width" is not a graphical parameter 3: In axis(1, at = xycoords$x, labels = FALSE, col = "#BBBBBB", ...) : "width" is not a graphical parameter 4: In axis(1, at = xycoords$x[ep], labels = names(ep), las = 1, lwd = 1, : "width" is not a graphical parameter 5: In axis(2, ...) : "width" is not a graphical parameter 6: In title(width = 0.5) : "width" is not a graphical parameter There were 12 warnings (use warnings() to see them) > warnings() Warning messages: 1: "width" is not a graphical parameter 2: "width" is not a graphical parameter 3: "width" is not a graphical parameter 4: "width" is not a graphical parameter 5: "width" is not a graphical parameter 6: "width" is not a graphical parameter 7: "width" is not a graphical parameter 8: "width" is not a graphical parameter 9: "width" is not a graphical parameter 10: "width" is not a graphical parameter 11: "width" is not a graphical parameter 12: "width" is not a graphical parameter 

I cannot use quantmod or xtsExtra since I am trying to build two different graphs (one timer and another regular XY line graph).

+6
source share
4 answers

You can ignore warnings, but you need to set width to something very large. plot.ohlc.candles , you can see that width based on the index of the xts object, which is in seconds.

 R> xts:::plot.ohlc.candles function (x, width = 0.2, order = 1:4, bar.col = "grey", candle.col = "white", ...) { segments(.index(x), x[, order[2]], .index(x), x[, order[3]], col = bar.col, ...) rect(.index(x) - width, x[, order[1]], .index(x) + width, x[, order[4]], col = candle.col, ...) } <environment: namespace:xts> 

This will set the width to 1/4-day:

 plot.xts(SF, type='candles', width=60*60*24*0.25) 

1/4 day candle chart

+7
source

As Joshua said, here is what I did to get the right diagram

 candlecolors <- ifelse(SF[,'Close'] > SF[,'Open'], 'RED', 'GREEN') plot.xts(SF, type='candles', width=25000, candle.col=candlecolors, bar.col='BLACK') 

This gave me the following diagram.

SF

+6
source

Since candles are just lines, you can use the lwd parameter to increase the line width. Unfortunately, there is an error if you use it directly:

 plot.xts(SF, type='candles',lwd=2) Error in axis(1, at = xycoords$x[ep], labels = names(ep), las = 1, lwd = 1, : formal argument "lwd" matched by multiple actual arguments 

This looks like a problem in how the plot.xts wrapper plot.xts .

You can make it work by installing it with par :

 opar <- par(lwd=2) plot.xts(SF, type='candles') par(opar) # reset to original parameters 

Although this affects both the grid line and the border of the graph.

+1
source

What about a scaling package? Then you can zoom in and out, however you want to use zm () at the end of the "plot" code, for example

 plot(datax) lines(datay) zm() 

?

0
source

All Articles