overlaying plots from a list of data frames
Another option,
library(ggplot2) qplot(year, value, data=melt(foo), color= L1)
which can also be achieved "by hand",
test<- do.call(rbind,foo) # combines all data.sets test$name <- do.call(rep, list(x=names(foo), times = unlist(lapply(foo,nrow)))) # append the name of the original dataset library(lattice) # or ggplot2, but there seem to be a problem with the "line" geom in this case xyplot (data ~year,data=test,groups=name,type="b",auto.key=list(space="right"))
Hope this helps, baptiste
On 4 Feb 2009, at 08:59, Gabor Grothendieck wrote:
Create a zoo object z and plot it:
library(zoo)
f <- function(x) zoo(x$data, levels(x$year)[x$year])
z <- do.call(merge, lapply(foo, f))
plot(z, screen = 1, col = 1:6, pch = 1:6, type = "o",
ylab = "data", xlab = "year")
legend("topright", legend = 1:6, lty = 1, pch = 1:6, col = 1:6)
See ?plot.zoo and the 3 zoo vignettes (pdf documents) in zoo package.
On Tue, Feb 3, 2009 at 4:54 PM, Timothy W. Hilton <twh142 at psu.edu>
wrote:
Hello R list,
I have a list of data frames, in the form (dump output for an example
list follows message):
$site1
year data
1 2000 0.03685042
2 2001 0.02583885
6 2005 0.02480015
7 2006 0.03458745
$site2
year data
1 2002 4.071134e-03
2 2003 -4.513524e-08
3 2004 8.336272e-08
4 2005 2.270803e-08
5 2006 1.263597e-02
6 2007 NaN
I would like to plot each site's data on a single plot, using a
different color and marker for each site. I can't figure out an
elegant way to do this; right now I am calling plot on site1, then
points on site2 ... siteN. This leads to recycling the list of plot
parameters (color, pch, etc.).
The following code allows me to use
do.call(FUN, lapply(list.of.sites, etc.
if (dev.cur() > 1) FUN <- points
else FUN <- plot
Now I would like to include several panels in one figure (there are
actually several columns of data in the data frame). I set up the
window with the panels, but that messes up the dev.cur() test I am
doing.
I would be most grateful for any suggestions of a more elegant setup,
or for a different condition to decide whether points or plot should
be called. Something like axis.already.exists(), but I can't figure
out what that test should be.
Many, many thanks.
-Tim
--
Timothy W. Hilton
PhD Candidate, Department of Meteorology and Atmospheric Science
The Pennsylvania State University
415 Walker Building, University Park, PA 16802
hilton at meteo.psu.edu
example list of data frames:
foo <-
structure(list(site1 = structure(list(year = structure(1:8, .Label =
c("2000",
"2001", "2002", "2003", "2004", "2005", "2006", "2007"), class =
c("ordered",
"factor")), data = c(0.0368504167319695, 0.0258388514332078,
0.0432316303304793, 0.0104757403348321, -0.00942333944266443,
0.0248001501763526, 0.03458745330367, NaN)), .Names = c("year",
"data"), class = "data.frame", row.names = c(NA, -8L)), site2 =
structure(list(
year = structure(1:6, .Label = c("2002", "2003", "2004",
"2005", "2006", "2007"), class = c("ordered", "factor")),
data = c(0.00407113433104158, -4.51352402858745e-08,
8.33627186959167e-08,
2.27080257687498e-08, 0.0126359731744113, NaN)), .Names =
c("year",
"data"), class = "data.frame", row.names = c(NA, -6L)), site3 =
structure(list(
year = structure(1:7, .Label = c("2000", "2001", "2002",
"2003", "2004", "2005", "2006"), class = c("ordered", "factor"
)), data = c(0.0297773868339168, 0.0212836833675155,
0.0301490879766663,
0.000944393402486824, -2.70247618264114e-09,
-2.84624718656657e-07,
NaN)), .Names = c("year", "data"), class = "data.frame", row.names
= c(NA,
-7L)), site4 = structure(list(year = structure(1:5, .Label =
c("2000",
"2001", "2002", "2003", "2004"), class = c("ordered", "factor"
)), data = c(0.000418478048104973, 0.00530609034999336,
0.020077837088374,
0.0326921217142046, NaN)), .Names = c("year", "data"), class =
"data.frame", row.names = c(NA,
-5L)), site5 = structure(list(year = structure(1:5, .Label =
c("2000",
"2001", "2003", "2004", "2005"), class = c("ordered", "factor"
)), data = c(0.00618165243153993, 0.00303216804813299,
-5.51581146266983e-08,
1.44109415817357e-09, 0.0336487468345765)), .Names = c("year",
"data"), class = "data.frame", row.names = c(NA, -5L)), site6 =
structure(list(
year = structure(1:6, .Label = c("2001", "2002", "2003",
"2004", "2005", "2006"), class = c("ordered", "factor")),
data = c(-6.33889022834333e-10, 1.34668283090261e-08,
4.17885398551684e-08,
0.00202872966966414, -3.82189201782033e-09, NaN)), .Names =
c("year",
"data"), class = "data.frame", row.names = c(NA, -6L))), .Names =
c("site1",
"site2", "site3", "site4", "site5", "site6"))
______________________________________________ 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.
_____________________________ Baptiste Augui? School of Physics University of Exeter Stocker Road, Exeter, Devon, EX4 4QL, UK Phone: +44 1392 264187 http://newton.ex.ac.uk/research/emag