[R] Plotting times at night and getting plot limits correct

Jeff Newmiller jdnewmil at dcn.davis.ca.us
Thu May 14 17:56:24 CEST 2015


I might do it this way using Jim's sample data:

epoch <- as.POSIXct( "1970-01-01" ) # any date you like
dta <- data.frame( Timestamps = epoch
                               + as.difftime( ifelse( Times >= 5/24
                                                    , Times
                                                    , Times + 1 )
                                            , units="days" )
                  , Thing=Thing
                  )
brks <- epoch + as.difftime( seq( 5, 29, 1 ), units="hours" )
plot( Thing ~ Timestamps, dta, xaxt="n", xlim=c( min(brks), max(brks) ) )
axis.POSIXct( 1, at=brks, format="%H:%M" )

or, using ggplot2 instead of base graphics:

library(ggplot2)
library(scales)
ggplot( dta, aes( x=Timestamps, y=Thing ) ) +
     geom_point() +
     scale_x_datetime( breaks=brks
                     , limits=c( min(brks), max(brks) )
                     , labels=date_format("%H:%M") ) +
     theme( axis.text.x = element_text( angle = 90, hjust = 1 ) )

On Thu, 14 May 2015, Jim Lemon wrote:

> Hi Bob,
> Given the other answers I may be off target, but perhaps this will help:
>
> # create two "nights" worth of data
> Times<-strptime(
> paste(c("2015-05-13","2015-05-14"),paste(rep(c(18:23,0:6),2),":30:00",sep="")),
> "%Y-%m-%d %H:%M:%S")
> # telescope the two nights into repeated hours
> Hours<-strptime(format(Times,"%H:%M:%S"),"%H:%M:%S")
> # get a measure that can be checked for the correct output
> calls_per_hour<-sample(10:100,length(Hours))
> # plot the repeated values - looks okay
> plot(Hours,calls_per_hour)
> # now calculate the mean values for each hourly measurement
> mean_calls_per_hour<-by(calls_per_hour,as.character(Hours),mean)
> # plot the means, making sure that the orders match
> plot(sort(unique(Hours)),mean_calls_per_hour)
>
> Jim
>
>
> On Wed, May 13, 2015 at 1:20 AM, Richard M. Heiberger <rmh at temple.edu> wrote:
>> Try this.
>>
>>> From the full data-time value subtract 18:00:00.
>> This places the times you are interested in into the range 00:00:00 - 12:00:00
>> Remove the date from these adjusted date-time values and plot y
>> against the new times.
>> Take control of the tick-labels and display 18:00 - 0600 instead of
>> the default 00:00 - 12:00
>>
>> Rich
>>
>> On Tue, May 12, 2015 at 10:34 AM, Bob O'Hara <rni.boh at gmail.com> wrote:
>>> I'm helping colleagues with analysis of frog calls at night, and they
>>> want to plot call statistics against time. This means we hit a
>>> problem: we want the x-axis to start at (say) 18:00 and end at (say)
>>> 06:00. I'm reluctant to use the date as well, because we have data
>>> from several dates, but only want to plot against time of day.
>>>
>>> Here's some code to illustrate the problem (don't worry about the data
>>> being outside the range of the plot: this is only for illustration).
>>>
>>> library(chron)
>>> Times <- chron(times.=paste(c(18:23,0:9),":30:00", sep=""))
>>> Thing <- rnorm(length(Times)) # just something for the y-axis
>>>
>>> plot(Times,Thing) # x-axis wrong
>>> plot(Times,Thing, xlim=chron(times.=c("05:00:00", "18:00:00"))) # x-axis right
>>> plot(Times,Thing, xlim=chron(times.=c("18:00:00", "05:00:00"))) #
>>> would like this to work...
>>>
>>> Can anyone suggest a solution?
>>>
>>> Bob
>>>
>>> --
>>> Bob O'Hara
>>>
>>> Biodiversity and Climate Research Centre
>>> Senckenberganlage 25
>>> D-60325 Frankfurt am Main,
>>> Germany
>>>
>>> Tel: +49 69 798 40226
>>> Mobile: +49 1515 888 5440
>>> WWW:   http://www.bik-f.de/root/index.php?page_id=219
>>> Blog: http://occamstypewriter.org/boboh/
>>> Journal of Negative Results - EEB: www.jnr-eeb.org
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> 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.
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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.
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                       Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k



More information about the R-help mailing list