[R] overlaying plots from a list of data frames

baptiste auguie ba208 at exeter.ac.uk
Wed Feb 4 10:35:30 CET 2009


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




More information about the R-help mailing list