複数系列データを持つxtsクラスのオブジェクトを色付きで描画する方法

Twitter上で

という質問をいただいたので、サンプルコード含めてここで回答します。

今回は描画したいサンプルデータはもう既に手元にあるという状況設定で、以下のようなサンプルデータを作成しておきました。
これを描画したいとします。

> library(xts)
> x <- xts(cbind(1:10,1:10+1), order.by = Sys.Date() + 0:9)
> x
           [,1] [,2]
2012-01-10    1    2
2012-01-11    2    3
2012-01-12    3    4
2012-01-13    4    5
2012-01-14    5    6
2012-01-15    6    7
2012-01-16    7    8
2012-01-17    8    9
2012-01-18    9   10
2012-01-19   10   11

これを単純にplot関数、あるいはplot.xts関数とxtsオブジェクトであることを明示的に指定してplotしようとすると・・・

> plot(x)
 警告メッセージ: 
In plot.xts(x) : only the univariate series will be plotted
> plot(x, col = "red")
 以下にエラー axis(1, at = xycoords$x, labels = FALSE, col = "#BBBBBB", ...) : 
   仮引数 ”col” が複数の実引数にマッチしました 
 追加情報:   警告メッセージ: 
In plot.xts(x, col = "red") : only the univariate series will be plotted

と、質問でいただいたようなエラーが出る*1

これを回避するために(私は)

> plot.zoo(x, col = c("red", "blue"))


zooクラスのオブジェクトだとしてplotさせて凌いでいます*2
この二枚plot・・・というかマルチプロット?が嫌な場合はplot.typeオプションでsingleを指定して

> plot.zoo(x, col = c("red", "blue"), plot.type = "single")

とするのがよいと思います。。結果は

となります。その他使えるオプションはplot.zooのHelpを引いてみてください。

最後に、これ以外のもっといいやり方をご存知の方がいたら教えてください・・・


xtsオブジェクト・パッケージに関するLINK&スライド

*1:一個目のplotは警告だけなんで描画されます

*2:xtsクラスはzooクラスを継承しているためこういうことが可能。class関数で見てみて下さい。