title: Adding Points, Legends and Text to plots using xts objects
body: <p>I am starting on a bit of analysis on pairs of stocks (pairs trading) and here is the function I wrote for producing a graph (pairs.report - listed below).</p>
  
  <p>I need to plot three different lines in a single plot. The function I have listed does what I want it to do, but it will take a bit of work if I want a fine customisation in the x-axis (the time line). As it is, it prints just the years (for 10 years of data) or the months (for 6 months of data) in the x-axis, with no formatting for ticks.</p>
  
  <p>If I use an xts object, i.e., if I use</p>
  
  <pre><code>plot(xts-object-with-date-asset1-asset2, ...)
  </code></pre>
  
  <p>instead of</p>
  
  <pre><code>plot(date, asset2, ...)
  </code></pre>
  
  <p>I get a nicely formatted x-axis right away (along with the grid and the box), but subsequent additions to the plot using functions like points(), text(), lines() fails. I suppose points.xts() and text.xts() are not coming out any time soon.</p>
  
  <p>I would like the convenience of xts objects, but I will also require a fine grained control over my plot. So what should my work-flow be like? Do I have to stick to basic graphics and do all the customisation manually? Or is there a way I can make xts work for me?</p>
  
  <p>I am aware of lattice and ggplot2, but I don't want to use them now. Here is the function I mentioned (any criticism/ suggestions for improvement of the code is welcome) -</p>
  
  <pre><code>library(xts)
  
  pairs.report &lt;- function(asset1, asset2, dataset) {
  
  #create data structures
  attach(dataset)
  datasetlm &lt;- lm(formula = asset1 ~ asset2 + 0, data = dataset)
  beta = coef(datasetlm)[1]
  
  #add extra space to right margin of plot within frame
  par(mar=c(5, 4, 4, 4) + 0.1)
  
  # Plot first set of data and draw its axis
  ylim &lt;- c(min(asset2,asset1), max(asset2,asset1))
  plot(date, 
       asset2,  
       axes=T, 
       ylim=ylim, 
       xlab="Timeline", 
       ylab="asset2 and asset1 equity", 
       type="l", 
       col="red", 
       main="Comparison between asset2 and asset1")
  lines(date, asset1, col="green")
  box()
  grid(lwd=3)
  
  # Allow a second plot on the same graph
  par(new=T)
  
  # Plot the second plot and 
  ylim &lt;- c(min(asset1-beta*asset2), max(asset1-beta*asset2))
  plot(date, 
       asset1-beta*asset2, 
       xlab="", ylab="", 
       ylim=ylim, 
       axes=F, 
       type="l", 
       col="blue")
  
  #put axis scale on right
  axis(side=4, 
       ylim=ylim, 
       col="blue",
       col.axis="blue")
  mtext("Residual Spread",side=4,col="blue",line=2.5)
  
  abline(h=mean(asset1-beta*asset2))
  }
  </code></pre>