[R] Multiple plots and postscripts using split function
Jeff Newmiller
jdnewmil at dcn.davis.CA.us
Thu Jul 31 20:56:39 CEST 2014
The range vector is evaluated at the start of the loop, so it is only evaluated once. ind.length would be an unnecessary extra variable.
---------------------------------------------------------------------------
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
---------------------------------------------------------------------------
Sent from my phone. Please excuse my brevity.
On July 31, 2014 11:09:59 AM PDT, Don McKenzie <dmck at u.washington.edu> wrote:
>While you�re at it, assign length(ind) to a variable before starting
>the loop. Otherwise length() is called at each iteration. e.g.,
>
>ind.length <- length(ind)
>for (i in 1:ind.length) {
>
>etc.
>
>On Jul 31, 2014, at 10:57 AM, David L Carlson <dcarlson at tamu.edu>
>wrote:
>
>> This is one of those times when you would do better to just use a
>loop. It will be easier to debug and to see what is going on. Replace
>the sapply() call with
>>
>> for (i in 1:length(ind)) {
>> postscript(names(ind[i]))
>> par(mar=c(6,8,6,5), cex=0.8)
>> plot(ind[[i]][,c('YEAR','VALUE')],
>> type='b',
>> main = ind[[i]][1, "NAME"],
>> . . . other commands . . . )
>> dev.off()
>> }
>>
>> -------------------------------------
>> David L Carlson
>> Department of Anthropology
>> Texas A&M University
>> College Station, TX 77840-4352
>>
>>
>>
>> -----Original Message-----
>> From: r-help-bounces at r-project.org
>[mailto:r-help-bounces at r-project.org] On Behalf Of fd
>> Sent: Thursday, July 31, 2014 9:37 AM
>> To: r-help at r-project.org
>> Subject: [R] Multiple plots and postscripts using split function
>>
>> Hi,
>>
>> I'm relatively new to R and I would like to do the following:
>>
>> I have a .csv file with four columns (NAME, ID, YEAR, VALUE) and
>would like
>> to do several xy plots with the year on the x-axis and the data
>values
>> (measurements) on the y-axis and after that export the different
>plots to
>> postcript.
>>
>> My .csv file looks something like this (only an example):
>>
>> NAME ID YEAR VALUE
>> ADAMS 885 1988 -2
>> ADAMS 885 1989 0
>> BAHIA DEL DIABLO 2665 1999 4
>> BAHIA DEL DIABLO 2665 2000 8
>> BAHIA DEL DIABLO 2665 2001 19
>> BAHIA DEL DIABLO 2665 2002 13
>> BAHIA DEL DIABLO 2665 2003 13
>> BARTLEY 893 1983 0
>> BARTLEY 893 1984 -1
>> BARTLEY 893 1985 0
>> BARTLEY 893 1988 2
>> BARTLEY 893 1989 -1
>> CANADA 877 1972 -1
>>
>> I have split the different items into groups and I'd like the plots
>to have
>> the title of NAME but the filename of the postscript to be exported
>should
>> have the ID as filename.
>>
>> My code so far:
>>
>> #Set Working Directory:
>> setwd("/Users/Desktop/FV")
>> # Read CSV
>> dat <- read.csv("FV.csv", sep=";", header=TRUE)
>> # Split Data
>> ind <- split(x = dat,f = dat[,'ID'])
>> nam <- names(ind)
>>
>> sapply(nam, function(x) {
>> postscript(x)
>> par(mar=c(6,8,6,5), cex=0.8)
>> plot(ind[[x]][,c('YEAR','VALUE')],
>> type='b',
>> main = x,
>> xlab="Time [Years]",
>> ylab="Front variation")
>> axis(1, at = seq(1800,2100,5), cex.axis=1, labels=FALSE, tcl=-0.3)
>> axis(2, at = seq(-100000,100000,500), cex.axis=1, labels=FALSE,
>> tcl=-0.3)
>>
>> dev.off()
>> })
>>
>> This results in plots with the title and filename of the resulting
>> postscript being the same. Is there a way to get the plot title out
>of the
>> NAME column and the filename out of the ID?
>>
>> Additionally I'd only like to plot graphs for items with more than 3
>data
>> values. Is this possible to incorporate in the split command?
>>
>> Another point is that some items have gaps in the time series where
>no
>> measurements were taken (in my example: BARTLEY from 1983 to 1985 and
>1988
>> to 1989). I would like to plot using type= 'b' so that the points are
>> connected with lines, but when doing that, the values between 1985
>and 1988
>> are automatically connected which I don't want. I'd like the plot to
>start
>> again at the value where the gap ends (in my example from 1988
>onwards). Is
>> there a solution for this?
>>
>> Any help is kindly appreciated! Thanks for your help.
>>
>> Kind regards,
>> fd
>>
>>
>>
>> --
>> View this message in context:
>http://r.789695.n4.nabble.com/Multiple-plots-and-postscripts-using-split-function-tp4694850.html
>> Sent from the R help mailing list archive at Nabble.com.
>>
>> ______________________________________________
>> 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.
>
>Don McKenzie
>Research Ecologist
>Pacific Wildland Fire Sciences Lab
>US Forest Service
>
>Affiliate Professor
>School of Environmental and Forest Sciences
>University of Washington
>dmck at uw.edu
>
>
>
>
>
> [[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.
More information about the R-help
mailing list