[R] Using dates on axis with Grid plots

Deepayan Sarkar deepayan.sarkar at gmail.com
Fri Jun 3 14:12:38 CEST 2011


On Thu, May 26, 2011 at 4:34 AM, Paul Murrell <p.murrell at auckland.ac.nz> wrote:
> Hi
>
> On 15/05/2011 2:01 a.m., Larry White wrote:
>>
>> Hi,
>>
>> I'm trying to use Grid plots and would like to have an X axis that
>> represents dates. I have several years of data so I would like to be able
>> to
>> have labeled tick marks only intermittently (not one per date).  I can
>> transform the initial data from a date time string into POSIXlt or
>> POSIXct,
>> or Date objects.
>>
>> The issue is that when I try to layout the plot using:
>>
>> dev.off()
>>   pushViewport(
>>     plotViewport(
>>       c(5, 5, 4, 2),
>>         xscale=c(
>>            min(foo),
>>            max(foo)),
>>            yscale=c(0,30)
>>     )
>> )
>>
>> I get this error, regardless of whether "foo" is formated as POSIXlt,
>> POSIXct or Date for the xscale.
>>
>> Error in valid.viewport(x, y, width, height, just, gp, clip, xscale,
>> yscale,
>>  :
>>   Invalid 'xscale' in viewport
>>
>> How does one specify the scale?  In the end, I would prefer something like
>> "2007   2008", etc. to appear on the axis and, of course, I'd actually
>> want
>> to plot the data with an x axis of dates. I'm not yet far enough to see if
>> that's going to be an issue.
>
> The viewport scale has to be numeric.  Dates are not supported at all by
> grid.xaxis() or grid.yaxis().  If your dates are just days, you can
> as.numeric() them to get a useful range and then pretty() and
> as.Date(origin="1970-01-01") to get useful labels for tick marks, but the
> general solution is more complex (see axis.Date()).  Depending on what your
> plots need to look like, another approach would be to customize a 'lattice'
> plot because it provides support for date-based  axes.

The (newish) pretty.POSIXt method makes this relatively painless:


foo <- as.POSIXct(Sys.Date() + c(0, 365, -365))

grid.newpage()
pushViewport(
   plotViewport(
       c(5, 5, 4, 2),
       xscale = as.numeric(range(foo)),
       yscale = c(0,30)
   )
)

grid.rect()
p <- pretty(foo)
grid.xaxis(at = p, label = attr(p, "labels"))

p <- pretty(foo, n = 2)
grid.xaxis(at = p, label = attr(p, "labels"), main = FALSE)

-Deepayan



> Paul
>
>>
>> Apologies if this is a stupid question, but it's very hard to search for
>> Grid examples on the web, because "grid" is a very common term in R
>> plotting
>> generally.
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
> --
> Dr Paul Murrell
> Department of Statistics
> The University of Auckland
> Private Bag 92019
> Auckland
> New Zealand
> 64 9 3737599 x85392
> paul at stat.auckland.ac.nz
> http://www.stat.auckland.ac.nz/~paul/
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list