[R] Adding colored background area to a time series plot
David Winsemius
dwinsemius at comcast.net
Sun Aug 15 21:44:12 CEST 2010
On Aug 15, 2010, at 12:21 PM, James Toll wrote:
> Hi,
>
> I am trying to add a rectangular colored background area to a plot
> of a time series of relative price changes. I believe that what I'm
> trying to do is very similar to the question and example given here:
>
> http://www.mail-archive.com/r-help@stat.math.ethz.ch/msg73948.html
> http://www.mayin.org/ajayshah/KB/R/html/g5.html
>
> My problem/difference is that my time series looks like so:
>
>> library(quantmod)
>> getSymbols("^GSPC", from="2008-01-01")
>> xtsPR <- diff(log(Ad(GSPC)))
>> head(xtsPR)
> GSPC.Adjusted
> 2008-01-02 NA
> 2008-01-03 0.000000000
> 2008-01-04 -0.024857950
> 2008-01-07 0.003218041
> 2008-01-08 -0.018522677
> 2008-01-09 0.013532064
>
> So my dates along the x-axis are in the format "2008-01-02" rather
> than "2008", as in the example.
>
> To keep things simple, I've simply been trying to plot the time
> series using the plot command:
>
> plot(xtsPR)
>
> and then adding either a polygon, or preferably, a rect:
>
> rect(2009-01-02, -0.10, 2009-12-31, 0.10, border = 0, col = "blue")
There would be a problem here:
a) In R: 2009-01-02 == 2006, since numbers separated by minus signs
would get parsed as, well, ... numbers.
b) Even if you had but quotes around 2009-01-02, you most probably
would not have gotten a proper response from rect, since it would not
have intuited that you were giving it a Date object. (The level of
abstraction of computers and interpreters is currently behind that of
the human brain.) It seems very doubtful that there is a rect.Date
function (i.e., a Date method for rect(), although I haven't checked)
c) Date objects are represented internally by the number of seconds
after a stating date, conventionally "1970-01-01". It is possible that:
> rect(as.Date("2009-01-02"), -0.10, as.Date("2009-12-31"), 0.10,
> border = 0, col = "blue")
.... might have worked as you expected but this was untested.
>
> But nothing is added to the plot when I try to add the rectangle,
> but I don't get an error message either.
>
> My question is how do I specify my x coordinates to draw the polygon
> or rect, given that my scale is of the form "2008-01-02" rather than
> simply "2008"?
>
> Additionally, do I have to use polygon, even if I'm trying to
> drawing a rectangle, as was the case in the examples linked above?
>
> I'd like to be able to use this with chartSeries, rather than plot,
> but I thought it would be easiest to figure it out using plot
> first. Clearly that hasn't helped me.
Grothendieck has given you an alternate solution, but even if it
"works" for you, you would be well advised to read up on Date and Date-
time objects ... they are different.
>
> Thanks for any advice you can provide.
>
> ?Date
> ?DateTime
No documentation for 'DateTime' in specified packages and libraries:
you could try '??DateTime'
> ?DateTimeClasses # works
Read, and learn.
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list