问题
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.
回答1:
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)
回答2:
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.
回答3:
Since the candles are just lines, you can use the lwd
parameter to increase the line widths. 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 an issue in how the plot.xts
wrapper works.
You can get it to work by setting it using par
:
opar <- par(lwd=2)
plot.xts(SF, type='candles')
par(opar) # reset to original parameters
Though this affects the gridlines and the chart border too.
回答4:
And what about zoom package? Then you can zoom in and out however you want to via zm() on the end of "plot" code like
plot(datax)
lines(datay)
zm()
?
来源:https://stackoverflow.com/questions/14443093/how-do-i-set-width-of-candles-in-candle-chart-using-plot-xts