[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