[R] Plotting multiple trends on one graph
Law, Jason
Jason.Law at portlandoregon.gov
Mon Nov 25 21:24:03 CET 2013
Natalie,
I'm assuming this is some kind of passive animal sampling? Instream PIT tags for fish? In that case, you can get what I think you want using ggplot2 and something like this:
dat$TagID <- as.factor(dat$TagID)
dat$Station <- as.factor(dat$Station)
dat$Station2 <- as.numeric(dat$Station)
ggplot(dat, aes(datetime, Station2, colour = TagID)) + geom_line() + scale_y_continuous(breaks = 1:nlevels(dat$Station), labels = levels(dat$Station))
This assumes that the stations are equidistant. If you have actual distances between your sampling stations and would like your graphs to reflect that you can easily modify the code above so that you plot the distances on the y axis and then label the axis using scale_y_continuous.
Using facet_wrap or facet_grid will let you separate the animals into different plots.
Regards,
Jason Law
Statistician
City of Portland
Bureau of Environmental Services
Water Pollution Control Laboratory
6543 N Burlington Avenue
Portland, OR 97203-5452
jason.law at portlandoregon.gov
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Duncan Mackay
Sent: Sunday, November 24, 2013 4:06 PM
To: 'Natalie Houghton McNair'
Cc: R
Subject: Re: [R] Plotting multiple trends on one graph
Hi Natalie
Here is an option using lattice. I think below will get you some way to what you want
This is your data formatted. in future please dput your data as your data was scrambled.
# dput(dat)
dat <- structure(list(TagID = c(4926L, 4926L, 4926L, 4926L, 4926L, 4926L, 4926L, 4926L, 4926L, 4926L, 4926L, 4929L, 4929L, 4929L, 4929L, 4929L, 4929L, 4929L, 4929L, 4929L, 4929L, 4929L, 4929L, 4929L, 4929L), Station = c("KLB", "MS01", "MS02", "MS03", "MS04", "MS05", "MS06", "MS07", "MS08", "MS09", "MS10", "KLB", "MS01", "MS02", "MS03", "MS04", "MS05", "MS06", "MS07", "MS08", "MS09", "MS10", "MS11", "MS12", "MS13"), datetime = c("12/21/2012 1:52", "12/21/2012 2:38",
"12/21/2012 3:48", "12/21/2012 4:19", "12/21/2012 4:34", "12/21/2012 5:01",
"12/21/2012 6:54", "12/21/2012 7:21", "12/21/2012 10:23", "12/21/2012 12:16",
"12/21/2012 14:38", "12/21/2012 1:08", "12/21/2012 2:12", "12/21/2012 3:33",
"12/21/2012 3:59", "12/21/2012 4:13", "12/21/2012 5:00", "12/21/2012 6:52",
"12/21/2012 7:32", "12/21/2012 10:16", "12/21/2012 11:43", "12/21/2012 14:02",
"12/22/2012 2:50", "12/22/2012 5:04", "12/22/2012 13:59"), gspd_mps = c(NA, 0.851, 0.629, 0.86, 1.131, 0.9, 0.798, 0.853, 0.694, 0.6, 0.647, NA, 0.611, 0.563, 1.04, 1.082, 0.475, 0.796, 0.563, 0.809, 0.783, 0.657, 0.326, 0.709, 0.688)), .Names = c("TagID", "Station", "datetime", "gspd_mps"), class = "data.frame", row.names = c(NA,
-25L))
# factor of id
dat[,1] <- factor(dat[,1])
# convert to datetime
x <- paste(dat[,3])
x <- strptime(x, "%m/%d/%Y %H:%M")
I have added a few extra formatting options but I will leave you to format the x labels as an exercise.
# lattice plot conditioned by station
library(lattice)
xyplot(gspd_mps ~ as.POSIXct(x)|Station, dat,
as.table = TRUE,
layout = c(1,14),
groups = TagID,
strip = FALSE,
type = c("p","g"),
par.settings = list(strip.background = list(col = "transparent"),
superpose.symbol = list(cex = c(1,0.7),
col = c("red","blue"),
pch = c(20,3))),
strip.left = strip.custom(par.strip.text = list(cex = 0.65) ),
scales = list(x = list(alternating = FALSE,
rot = 90)),
auto.key = TRUE
)
# using latticeExtra conditioned by station and tag
library(latticeExtra)
useOuterStrips(strip = strip.custom(factor.levels = paste("TagID",
unique(dat$TagID)),
par.strip.text = list(cex = 0.85)),
strip.left = strip.custom(horizontal = TRUE,
par.strip.text = list(cex = 0.75)),
strip.left.lines = 2, xyplot(gspd_mps ~ as.POSIXct(x)|TagID*Station, dat,
as.table = TRUE,
scales = list(x = list(alternating = FALSE,
rot = 90)),
type = c("p","g")
)
) ## useOuterStrips
useOuterStrips(strip = strip.custom(factor.levels = paste("TagID",
unique(dat$TagID)),
par.strip.text = list(cex = 0.85)),
strip.left = strip.custom(horizontal = TRUE,
par.strip.text = list(cex = 0.75)),
strip.left.lines = 2, xyplot(gspd_mps ~ as.POSIXct(x)|TagID*Station, dat,
as.table = TRUE,
scales = list(x = list(alternating = FALSE,
rot = 90)),
panel = function(x,y, ...){
panel.grid(h = 0, v= -1)
panel.xyplot(x,y,...)
}
)
) ## useOuterStrips
HTH
Duncan
Duncan Mackay
Department of Agronomy and Soil Science
University of New England
Armidale NSW 2351
Email: home: mackay at northnet.com.au
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Natalie Houghton McNair
Sent: Monday, 25 November 2013 02:49
To: R-help at r-project.org
Subject: [R] Plotting multiple trends on one graph
>
> Hello all,
>
> I am tracking hundreds of animals through a system with multiple
> timing points. I want to graph the movement of individuals through
> the whole array on one graph, but I can't figure out how to do that.
> An example of my data is below. Basically for each 'TagID', I want to
graph the 'date'
> or 'gspd_mps' on the X axis and 'Station' on the Y axis, with all
> TagID's on one graph.
>
Thanks for the help!! I'm very new to R.
Natalie
TagID Station datetime gspd_mps 4926 KLB 12/21/2012 1:52 NA 4926
MS01 12/21/2012
2:38 0.851 4926 MS02 12/21/2012 3:48 0.629 4926 MS03 12/21/2012 4:19 0.86
4926 MS04 12/21/2012 4:34 1.131 4926 MS05 12/21/2012 5:01 0.9 4926
MS06 12/21/2012
6:54 0.798 4926 MS07 12/21/2012 7:21 0.853 4926 MS08 12/21/2012 10:23
0.694 4926 MS09 12/21/2012 12:16 0.6 4926 MS10 12/21/2012 14:38 0.647
4929 KLB 12/21/2012 1:08 NA 4929 MS01 12/21/2012 2:12 0.611 4929
MS02 12/21/2012
3:33 0.563 4929 MS03 12/21/2012 3:59 1.04 4929 MS04 12/21/2012 4:13 1.082
4929 MS05 12/21/2012 5:00 0.475 4929 MS06 12/21/2012 6:52 0.796 4929
MS07 12/21/2012
7:32 0.563 4929 MS08 12/21/2012 10:16 0.809 4929 MS09 12/21/2012 11:43
0.783 4929 MS10 12/21/2012 14:02 0.657 4929 MS11 12/22/2012 2:50 0.326
4929 MS12 12/22/2012 5:04 0.709 4929 MS13 12/22/2012 13:59 0.688
>
>
[[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.
______________________________________________
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