quantmodパッケージのTA.Rファイルのコードに基づいて、長方形の始点と終点を見つけるために使用するコードを次に示します。rle
runs <- rle(as.logical(spy[, 1] > spy[, 2]))
l <- list(start=cumsum(runs$length)[which(runs$values)] - runs$length[which(runs$values)] + 1,
end=cumsum(runs$lengths)[which(runs$values)])
rect <- data.frame(xmin=l$start, xmax=l$end, ymin=-Inf, ymax=Inf)
あなたがリンクした質問に対する受け入れられた答えggplot2
からのいくつかのコードとそれを組み合わせてください:
ggplot(spy,aes(x=index(spy),y=spy$SPY.Adjusted))+geom_line()+geom_line(aes(x=index(spy),y=spy$sma))+geom_rect(data=rect, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), color="grey20", alpha=0.5, inherit.aes = FALSE)
そして、あなたは得る:

プロットの順序を逆にして使用すると、alpha=1
希望どおりに表示さgeom_rect
れる場合と表示されない場合があります。
ggplot(spy,aes(x=index(spy),y=spy$SPY.Adjusted))+geom_rect(data=rect, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), border=NA, color="grey20", alpha=1, inherit.aes = FALSE)+geom_line()+geom_line(aes(x=index(spy),y=spy$sma))

あなたはxts
オブジェクトを持っているので。に変換したくない場合もありdata.frame
ます。これは、Google SummerofCodeプロジェクトの一部としてMichaelWeylandtによって作成されたxtsExtraパッケージの新しいplot.xts
メソッドを使用してプロットする方法です。
spy <- as.xts(spy)
require(xtsExtra)
plot(spy, screens=1,
blocks=list(start.time=paste(index(spy)[l$start]),
end.time=paste(index(spy)[l$end]), col='lightblue'),
legend.loc='bottomright', auto.legend=TRUE)
