Struve, Juliane
2010-Sep-23 13:50 UTC
[R] plotting multiple animal tracks against Date/Time
Dear list, I would like to create a time series plot in which the paths of several individuals are stacked above each other, with the x-axis being the total observation period of three years ( 1.1.2004 to 31.12.2007) and the y-axis being some defined range[min,max]. My data consist of Date/Time information and the paths of 45 individual as the distance from the location of release. An example data set for 2 individuals is given below.The observation period and frequency of observations varies between individuals. I believe stackplot() may be able to do this task, but I am not sure how to handle the variable time period and frequency of observations for different individuals. Could someone advise if stackplot() is suitable or if there is a better approach or package ? Thank you very much for your time and best wishes, Juliane Individual 1 Date Distance [m] 2006-08-18 22:05:15 1815.798 2006-08-18 22:06:35 1815.798 2006-08-18 22:08:33 1815.798 2006-08-18 22:09:49 1815.798 2006-08-18 22:12:50 1815.798 2006-08-18 22:16:26 1815.798 Individual 2 Date Distance [m] 2006-08-18 09:53:20 0.0 2006-08-18 09:59:07 0.0 2006-08-18 10:09:20 0.0 2006-08-18 10:21:14 0.0 2006-08-18 10:34:18 0.0 2006-08-18 10:36:44 100.2 2 Date Distance 6 2006-08-18 09:53:20 0.0 7 2006-08-18 09:59:07 0.0 8 2006-08-18 10:09:20 0.0 9 2006-08-18 10:21:14 0.0 10 2006-08-18 10:34:18 0.0 11 2006-08-18 10:36:44 100.2 006-03-1 22:05:15 1815.798 2006-03-18 22:06:35 1815.798 2006-03-18 22:08:33 1815.798 2006-03-18 22:09:49 1815.798 2006-03-18 22:12:50 1815.798 2006-03-18 22:16:26 1815.798 Dr. Juliane Struve Imperial College London Department of Life Sciences Silwood Park Campus Buckhurst Road Ascot, Berkshire, SL5 7PY, UK Tel: +44 (0)20 7594 2527 Fax: +44 (0)1344 874 957 http://www.aquaticresources.org
Struve, Juliane
2010-Sep-23 15:31 UTC
[R] Plotting multiple animal tracks against Date/Time
Sorry for posting this questions twice, but my previous question was accidentally sent unfinished. Dear list, I would like to create a time series plot in which the paths of several individuals are stacked above each other, with the x-axis being the total observation period of three years ( 1.1.2004 to 31.12.2007) and the y-axis being some defined range[min,max]. My data consist of Date/Time information and the paths of 45 individual as the distance from the location of release. An example data set for 2 individuals is given below.The observation period and frequency of observations varies between individuals. I believe stackplot() may be able to do this task, but I am not sure how to handle the variable time period and frequency of observations for different individuals. Could someone advise if stackplot() is suitable or if there is a better approach or package ? Thank you very much for your time, Juliane Individual 1 Date Distance [m] 2005-07-18 22:05:15 1815.798 2005-07-18 22:06:35 1815.798 2005-07-18 22:08:33 1815.798 2005-07-18 22:09:49 1815.798 2005-07-18 22:12:50 1815.798 2005-07-18 22:16:26 1815.798 Individual 2 Date Distance [m] 2006-08-18 09:53:20 0.0 2006-08-18 09:59:07 0.0 2006-08-18 10:09:20 0.0 2006-08-18 10:21:14 100.5 Dr. Juliane Struve Imperial College London Department of Life Sciences Ascot, Berkshire, SL5 7PY, UK
By range on the y-axis, do you mean distance? It would have to be if time is on your x? Or am I misreading this? You could just plot() with the data for your first individual, and then add additional individuals after that using lines(), specifying a different colour and/or line type for each individual, and could even plot points as well to identify your actual data collection points. Alternatively, you could do a bunch of multi-panel plots with the same axes, and individual data is given in each plot. It sounds like this is what you want to do by referencing stackplot() (based on it's description, I've never used it)? If so, see ?par for details, specifically mfrow, mfcol. By doing it with calls to par(), I think you'll have more control over the appearance of the plot than with stackplot(). Mike On Thu, Sep 23, 2010 at 8:50 AM, Struve, Juliane <j.struve@imperial.ac.uk>wrote:> Dear list, > > I would like to create a time series plot in which the paths of several > individuals are stacked above each other, with the x-axis being the total > observation period of three years ( 1.1.2004 to 31.12.2007) and the y-axis > being some defined range[min,max]. > > My data consist of Date/Time information and the paths of 45 individual as > the distance from the location of release. An example data set for 2 > individuals is given below.The observation period and frequency of > observations varies between individuals. > > I believe stackplot() may be able to do this task, but I am not sure how to > handle the variable time period and frequency of observations for different > individuals. Could someone advise if stackplot() is suitable or if there is > a better approach or package ? > > Thank you very much for your time and best wishes, > > Juliane > > > Individual 1 > > Date Distance [m] > > 2006-08-18 22:05:15 1815.798 > 2006-08-18 22:06:35 1815.798 > 2006-08-18 22:08:33 1815.798 > 2006-08-18 22:09:49 1815.798 > 2006-08-18 22:12:50 1815.798 > 2006-08-18 22:16:26 1815.798 > > Individual 2 > > Date Distance [m] > 2006-08-18 09:53:20 0.0 > 2006-08-18 09:59:07 0.0 > 2006-08-18 10:09:20 0.0 > 2006-08-18 10:21:14 0.0 > 2006-08-18 10:34:18 0.0 > 2006-08-18 10:36:44 100.2 > > > > 2 Date Distance > 6 2006-08-18 09:53:20 0.0 > 7 2006-08-18 09:59:07 0.0 > 8 2006-08-18 10:09:20 0.0 > 9 2006-08-18 10:21:14 0.0 > 10 2006-08-18 10:34:18 0.0 > 11 2006-08-18 10:36:44 100.2 > 006-03-1 22:05:15 1815.798 > 2006-03-18 22:06:35 1815.798 > 2006-03-18 22:08:33 1815.798 > 2006-03-18 22:09:49 1815.798 > 2006-03-18 22:12:50 1815.798 > 2006-03-18 22:16:26 1815.798 > > > > > Dr. Juliane Struve > Imperial College London > Department of Life Sciences > Silwood Park Campus > Buckhurst Road > Ascot, Berkshire, > SL5 7PY, UK > > Tel: +44 (0)20 7594 2527 > Fax: +44 (0)1344 874 957 > > http://www.aquaticresources.org > ______________________________________________ > R-help@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<http://www.r-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]
Gabor Grothendieck
2010-Sep-23 17:26 UTC
[R] plotting multiple animal tracks against Date/Time
On Thu, Sep 23, 2010 at 9:50 AM, Struve, Juliane <j.struve at imperial.ac.uk> wrote:> Dear list, > > I would like to create a time series plot in which the paths of several individuals are stacked above each other, with the x-axis being the total observation period of three years ( 1.1.2004 to 31.12.2007) and the y-axis being ?some defined range[min,max]. > > My data consist of Date/Time information and the paths of 45 individual as the distance from the location of release. An example data set for 2 individuals is given below.The observation period and frequency of observations varies between individuals. > > I believe stackplot() may be able to do this task, but I am not sure how to handle the variable time period and frequency of observations for different individuals. Could someone advise if stackplot() is suitable or if there is a better approach or package ? > > Thank you very much for your time and best wishes, > > Juliane > >Try this: Lines1 <- "Date Distance [m] 2006-08-18 22:05:15 1815.798 2006-08-18 22:06:35 1815.798 2006-08-18 22:08:33 1815.798 2006-08-18 22:09:49 1815.798 2006-08-18 22:12:50 1815.798 2006-08-18 22:16:26 1815.798" Lines2 <- "Date Distance [m] 2006-08-18 09:53:20 0.0 2006-08-18 09:59:07 0.0 2006-08-18 10:09:20 0.0 2006-08-18 10:21:14 0.0 2006-08-18 10:34:18 0.0 2006-08-18 10:36:44 100.2" library(chron) dt <- function(date, time) as.chron(paste(date, time)) library(zoo) library(chron) # read in data dt <- function(date, time) as.chron(paste(date, time)) z1 <- read.zoo(textConnection(Lines1), skip = 1, index = list(1, 2), FUN = dt) z2 <- read.zoo(textConnection(Lines2), skip = 1, index = list(1, 2), FUN = dt) # create single zoo object z <- na.approx(cbind(z1, z2), na.rm = FALSE) # plot -- remove screen=1 if you want separate panels plot(z, screen = 1) -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com
Struve, Juliane
2010-Sep-28 13:30 UTC
[R] plotting multiple animal tracks against Date/Time
Hi, in this self-contained example the file the same error message appears as when I read in my original results files. library (zoo) library(chron) #generate example data Fish_ID=1646 Date <- "01/01/2004 00:01:00" Date <- as.POSIXct(strptime(Date,format="%m/%d/%Y %H:%M:%S")) R2sqrt <-100 #put into dataframe Test <- data.frame(Fish_ID=Fish_ID,Date=Date,R2sqrt=R2sqrt) # write .csv file write.csv(Test,file="Test") #generate list of files filenames="Test" #read file(s) into zoo object read.zoo(file=filenames, header = TRUE, FUN = as.chron, sep = ",", colClasses = c("NULL", "NULL", "character", "numeric")) #works fine #read list of files into zoo.object lapply(filenames, read.zoo, header = TRUE, FUN = as.chron, sep = ",", colClasses = c("NULL", "NULL", "character", "numeric"))# error "Error in strptime(x, format, tz = tz) : invalid 'x' argument" Am I missing something ? Thank you for your time and patience. Juliane Sorry for posting twice, libraries were missing earlier. ________________________________________ From: Gabor Grothendieck [ggrothendieck at gmail.com] Sent: 27 September 2010 23:32 To: Struve, Juliane Cc: r-help at r-project.org Subject: Re: [R] plotting multiple animal tracks against Date/Time On Mon, Sep 27, 2010 at 5:38 PM, Struve, Juliane <j.struve at imperial.ac.uk> wrote:> Hello, > > thank you very much for replying. The code yields an error message > > Error in strptime(x, format, tz = tz) : invalid 'x' argument > > But I can't see what's wrong with it, the Date/Time info is in the third column, format is > "%Y-%m-%d %H:%M:%S". There is no time zone info in the data, could this be a problem ? >See the last line on every message to r-help. You need to put together a minimal self contained example that illustrates the problem. The best I can do with the information provided is to point out that this works:> Lines <- '"","Fish_ID","Date","R2sqrt"+ "1",1646,2006-08-18 08:48:59,0 + "2",1646,2006-08-18 09:53:20,100'> > library(zoo) > library(chron) > read.zoo(textConnection(Lines), header = TRUE, FUN = as.chron,+ sep = ",", colClasses = c("NULL", "NULL", "character", "numeric")) (08/18/06 08:48:59) (08/18/06 09:53:20) 0 100 -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com