I have simple OHLC data in and XTS
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')
The candles are coming out very thin. How do I make them wider?
By looking into source code of plot.xts I see that xts internal function plot.ohlc.candles is called to plot OHLC data as candles, to which ... is passed. H
plot.ohlc.candles(x, bar.col = bar.col, candle.col = candle.col,
...)
However, if I try to set argument width=0.5 in my plot.xts function call, I get warnings that width is not graphic 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 am unable to use quantmod or xtsExtra since I am trying to plot two different plots (one timeseries and other normal XY line graph) side by side.
You can ignore the warnings, but you need to set width
to something very large. Looking at plot.ohlc.candles
, you can see that the width
is 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)
As Joshua mentioned, here is what I did to get correct chart
candlecolors <- ifelse(SF[,'Close'] > SF[,'Open'], 'RED', 'GREEN')
plot.xts(SF, type='candles', width=25000, candle.col=candlecolors, bar.col='BLACK')
This gave me following chart.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With