quantmodのチャートをクリックして、特定の日を選んだり、直線を引いたりしたいと思った。
quantmodにはzooomという関数がある。これはチャートの2点をクリックするとその期間をzoomしてくれるというものだ。
その関数のソースを調べてみた。その中でget.chobという関数でチャートオブジェクトを得ている。このオブジェクトにはチャートに関する様々な情報が格納されていた。また、関数chartSeriesのソースを調べると、実際に描くのはchartSeries.chobという関数であることがわかり、さらにchartSeries.chobを調べて、チャートオブジェクトの情報のうちで、使えそうなものを見つけた。それらの調査から次のような関数を作った。
この関数は、実行するとlocatorの十字が表示されるので、クリックすると、その日のデータを表示するというものである。参考として関数内で得ている値も表示した。プログラムと実行結果は次の通り。
3行めのcoがチャートオブジェクトである。
xdataはチャートを描くxts型のデータ。
xsubsetはsubsetで指定されたデータを整数値で示したもの、例えば125,126,127,...などとなっている、xdata内の行番号の列である。
nはデータ数(=xsubsetの長さ)
dxは1日分のデータのx軸上の幅である。
chartSeries.chobのソースによれば、i番目のデータのx座標は 1+(i-1)*dx を中心とするので、その前後 dx/2 の範囲をi番目のデータと認識するようにした。8行めである。
14行目以降が表示されたものである。
これができるといろいろできそうだ。
0 件のコメント:
コメントを投稿